<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Change SYSTEM "https://itk.org/migrationv4/ITKMigration.dtd">

<Change>
    <Title>
      Remove MSVS Hack For GetImageDimension
    </Title>
    <Author>
      Hans Johnson
    </Author>
    <Date>
      2012-10-30
    </Date>
    <Description>
      <![CDATA[
      Remove unnecessary function GetImageDimension
      Historical bug in MSVC required a work around, an enum value cannot be accessed out of a template
      parameter until the template class opens.  In order for templated classes
      to access the dimension of an image template parameter in defining their
      own dimension, this class is needed as a work-around.

      This old version of MSVC is no longer supported, so this work around
      is no longer needed.  Using the standard C++ syntax improves code
      maintenance
      ]]>
    </Description>

    <SampleCode>
      <Old>
        <![CDATA[
        Image< IdentifierType, ::itk::GetImageDimension< TInputImage >::ImageDimension > >
        ]]>
      </Old>
      <New>
        <![CDATA[
        Image< IdentifierType, TInputImage::ImageDimension > >
        ]]>
      </New>

    </SampleCode>

    <Gerrit-ChangeId>
      I2ef9c40596343006d37fc8915b152add6a392ee6
    </Gerrit-ChangeId>

    <!--**
    ** List of all changed files from the topic branch
    **-->
    <FileList>
      Modules/Compatibility/Deprecated/include/itkCompose2DCovariantVectorImageFilter.h
      Modules/Compatibility/Deprecated/include/itkCompose2DVectorImageFilter.h
      Modules/Compatibility/Deprecated/include/itkCompose3DCovariantVectorImageFilter.h
      Modules/Compatibility/Deprecated/include/itkCompose3DVectorImageFilter.h
      Modules/Compatibility/Deprecated/include/itkComposeRGBImageFilter.h
      Modules/Compatibility/V3Compatibility/include/itkDeformationFieldJacobianDeterminantFilter.h
      Modules/Compatibility/V3Compatibility/include/itkImageToVectorImageFilter.h
      Modules/Core/Common/include/itkBinaryThresholdSpatialFunction.h
      Modules/Core/Common/include/itkImageBase.h
      Modules/Core/Common/include/itkImageRandomNonRepeatingConstIteratorWithIndex.h
      Modules/Core/Common/include/itkNeighborhoodAlgorithm.h
      Modules/Core/Common/include/itkVectorImageNeighborhoodAccessorFunctor.h
      Modules/Core/ImageAdaptors/include/itkImageAdaptor.h
      Modules/Core/ImageFunction/include/itkGaussianDerivativeImageFunction.h
      Modules/Filtering/BiasCorrection/include/itkN4BiasFieldCorrectionImageFilter.h
      Modules/Filtering/DisplacementField/include/itkDisplacementFieldJacobianDeterminantFilter.h
      Modules/Filtering/FastMarching/include/itkFastMarchingExtensionImageFilter.h
      Modules/Filtering/FastMarching/include/itkFastMarchingImageFilter.h
      Modules/Filtering/FastMarching/include/itkFastMarchingUpwindGradientImageFilter.h
      Modules/Filtering/ImageCompare/include/itkCheckerBoardImageFilter.h
      Modules/Filtering/ImageCompose/include/itkJoinImageFilter.h
      Modules/Filtering/ImageFeature/include/itkHessian3DToVesselnessMeasureImageFilter.h
      Modules/Filtering/ImageFeature/include/itkHessianRecursiveGaussianImageFilter.h
      Modules/Filtering/ImageGradient/include/itkDifferenceOfGaussiansGradientImageFilter.h
      Modules/Filtering/ImageGradient/include/itkGradientRecursiveGaussianImageFilter.h
      Modules/Filtering/ImageGradient/include/itkVectorGradientMagnitudeImageFilter.h
      Modules/Filtering/ImageGrid/include/itkSliceBySliceImageFilter.h
      Modules/Filtering/ImageStatistics/include/itkImagePCADecompositionCalculator.h
      Modules/Filtering/ImageStatistics/include/itkImagePCAShapeModelEstimator.h
      Modules/Filtering/ImageStatistics/include/itkImageShapeModelEstimatorBase.h
      Modules/Filtering/LabelMap/include/itkBinaryImageToLabelMapFilter.h
      Modules/Filtering/LabelMap/include/itkBinaryImageToShapeLabelMapFilter.h
      Modules/Filtering/LabelMap/include/itkBinaryImageToStatisticsLabelMapFilter.h
      Modules/Filtering/LabelMap/include/itkLabelImageToLabelMapFilter.h
      Modules/Filtering/LabelMap/include/itkLabelImageToShapeLabelMapFilter.h
      Modules/Filtering/LabelMap/include/itkLabelImageToStatisticsLabelMapFilter.h
      Modules/Filtering/LabelMap/include/itkLabelMap.h
      Modules/Filtering/LabelMap/include/itkObjectByObjectLabelMapFilter.h
      Modules/Filtering/LabelMap/include/itkShapeLabelMapFilter.h
      Modules/Filtering/LabelMap/include/itkStatisticsLabelMapFilter.h
      Modules/Nonunit/Review/include/itkDiscreteHessianGaussianImageFunction.h
      Modules/Nonunit/Review/include/itkFastApproximateRankImageFilter.h
      Modules/Nonunit/Review/include/itkHessianToObjectnessMeasureImageFilter.h
      Modules/Nonunit/Review/include/itkKappaSigmaThresholdImageFilter.h
      Modules/Nonunit/Review/include/itkMaskedRankImageFilter.h
      Modules/Nonunit/Review/include/itkMultiScaleHessianBasedMeasureImageFilter.h
      Modules/Nonunit/Review/include/itkRankImageFilter.h
      Modules/Nonunit/Review/include/itkStochasticFractalDimensionImageFilter.h
      Modules/Nonunit/Review/include/itkVectorCentralDifferenceImageFunction.h
      Modules/Numerics/Optimizersv4/test/itkRegistrationParameterScalesEstimatorTest.cxx
      Modules/Numerics/Optimizersv4/test/itkRegistrationParameterScalesFromIndexShiftTest.cxx
      Modules/Numerics/Optimizersv4/test/itkRegistrationParameterScalesFromJacobianTest.cxx
      Modules/Numerics/Optimizersv4/test/itkRegistrationParameterScalesFromPhysicalShiftTest.cxx
      Modules/Numerics/Statistics/include/itkScalarImageToRunLengthFeaturesFilter.hxx
      Modules/Numerics/Statistics/include/itkScalarImageToTextureFeaturesFilter.hxx
      Modules/Registration/Common/include/itkImageToImageMetric.h
      Modules/Registration/Metricsv4/include/itkANTSNeighborhoodCorrelationImageToImageMetricv4.h
      Modules/Registration/Metricsv4/include/itkCorrelationImageToImageMetricv4.h
      Modules/Registration/Metricsv4/include/itkDefaultImageToImageMetricTraitsv4.h
      Modules/Registration/Metricsv4/include/itkDemonsImageToImageMetricv4.h
      Modules/Registration/Metricsv4/include/itkJointHistogramMutualInformationImageToImageMetricv4.h
      Modules/Registration/Metricsv4/include/itkMattesMutualInformationImageToImageMetricv4.h
      Modules/Registration/Metricsv4/include/itkMeanSquaresImageToImageMetricv4.h
      Modules/Registration/Metricsv4/include/itkVectorImageToImageMetricTraitsv4.h
      Modules/Registration/Metricsv4/test/itkImageToImageMetricv4Test.cxx
      Modules/Registration/Metricsv4/test/itkMetricImageGradientTest.cxx
      Modules/Segmentation/Classifiers/include/itkBayesianClassifierImageFilter.h
      Modules/Segmentation/Classifiers/include/itkBayesianClassifierInitializationImageFilter.h
      Modules/Segmentation/Classifiers/include/itkScalarImageKmeansImageFilter.h
      Modules/Segmentation/LevelSets/include/itkNarrowBandCurvesLevelSetImageFilter.h
      Modules/Segmentation/LevelSets/include/itkNarrowBandLevelSetImageFilter.h
      Modules/Segmentation/LevelSets/include/itkNarrowBandThresholdSegmentationLevelSetImageFilter.h
      Modules/Segmentation/LevelSets/include/itkSegmentationLevelSetImageFilter.h
      Modules/Segmentation/LevelSets/include/itkSparseFieldFourthOrderLevelSetImageFilter.h
      Modules/Segmentation/LevelSets/test/itkImplicitManifoldNormalVectorFilterTest.cxx
      Modules/Segmentation/Watersheds/include/itkTobogganImageFilter.h
      Modules/Segmentation/Watersheds/include/itkWatershedImageFilter.h
      Modules/Compatibility/V3Compatibility/include/itkDeformationFieldJacobianDeterminantFilter.h
      Modules/Core/ImageFunction/include/itkScatterMatrixImageFunction.hxx
      Modules/Filtering/DisplacementField/include/itkDisplacementFieldJacobianDeterminantFilter.h
      Modules/Filtering/ImageGradient/include/itkVectorGradientMagnitudeImageFilter.h
      Modules/Core/Common/include/itkPointSet.h
      Modules/Core/ImageFunction/include/itkVectorInterpolateImageFunction.h
      Modules/Core/Mesh/include/itkMesh.h
      Modules/Core/SpatialObjects/include/itkMeshSpatialObject.h
      Modules/Nonunit/Review/include/itkConformalFlatteningMeshFilter.h
      Modules/Nonunit/Review/include/itkVectorCentralDifferenceImageFunction.h
      Modules/Numerics/FEM/include/itkFEMPArray.h
      Modules/Numerics/Statistics/include/itkHistogram.h
      Modules/Registration/Common/include/itkEuclideanDistancePointMetric.h
    </FileList>

    <!--**
    ** If the migration can NOT be accomplished by a simple string
    ** substitution, but potential problem spots can be identified,
    ** use the following construct to define a migration flag rule.
    **
    ** <MigrationFix-Manual>
    **     :%s/::itk::GetImageDimension<\( *[^>]*\)> *::/\1::/g
    ** </MigrationFix-Manual>
    **-->

</Change>
