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

<!--**
**
** LandmarkBasedTransformInitializerSupportedTransforms.xml
**
** Please, make sure this file validates the following w3c test before committing it: http://validator.w3.org
**-->
<Change>
    <!--**
    ** Title for the online migration page
    **-->
    <Title>
      Landmark Based Transform Initializer Supported Transforms
    </Title>

    <!--**
    ** The author of the change
    **-->
    <Author>
      Ali Ghayoor
    </Author>

    <!--**
    ** Date of creation for the XML document
    **-->
    <Date>
      2014-11-02
    </Date>

    <!--**
    ** Plain text description of the change
    ** Extracted from git commit messages
    **-->
    <Description>
      <![CDATA[
      LandmarkBasedTransformInitializer now supports BSplineTransformType.

      Only the following transform types were supported by the
      LandmarkBasedTransformInitializer class:
      VersorRigid3DTransform
      Rigid2DTransform
      AffineTransform

      Now, support for the BSplineTransform is also added.
      Also, I moved this class from the Modules/Core/Transform/ to the
      Modules/Registration/Common/ to avoid module dependency cycle.

      New implementations needed the ITKImageGrid be added to the
      dependencies, and if this class was kept in ITKTransform, it would cause
      a module dependency cycle.
      ]]>
    </Description>

    <!--**
    ** Sample code snippets
    ** Extracted from git diff of changed files in Examples and Testing
    **-->
    <SampleCode>
      <Old>
        <![CDATA[
          typedef VersorRigid3DTransform< ParametersValueType >                          VersorRigid3DTransformType;
          typedef Rigid2DTransform< ParametersValueType >                                Rigid2DTransformType;
          typedef AffineTransform< ParametersValueType, FixedImageType::ImageDimension > AffineTransformType;
        ]]>
      </Old>

      <New>
        <![CDATA[
          typedef VersorRigid3DTransform< ParametersValueType >                          VersorRigid3DTransformType;
          typedef Rigid2DTransform< ParametersValueType >                                Rigid2DTransformType;
          typedef AffineTransform< ParametersValueType, FixedImageType::ImageDimension > AffineTransformType;

          const static unsigned int SplineOrder = 3;
          typedef itk::BSplineTransform< ParametersValueType,
                                         FixedImageType::ImageDimension,
                                         SplineOrder>                                   BSplineTransformType;
        ]]>
      </New>

    </SampleCode>

    <!--**
    ** The change-ids for all commits in the topic branch
    **-->
    <Gerrit-ChangeId>
      I09b895627fcace1915ea8ade76f0f7f7273b5ffa
    </Gerrit-ChangeId>

    <!--**
    ** List of all changed files from the topic branch
    **-->
    <FileList>
      Modules/Core/Transform/include/itkLandmarkBasedTransformInitializer.h
      Modules/Core/Transform/include/itkLandmarkBasedTransformInitializer.hxx
      Modules/Core/Transform/test/CMakeLists.txt
      Modules/Core/Transform/test/itkLandmarkBasedTransformInitializerTest.cxx
      Modules/Registration/Common/include/itkLandmarkBasedTransformInitializer.h
      Modules/Registration/Common/include/itkLandmarkBasedTransformInitializer.hxx
      Modules/Registration/Common/test/CMakeLists.txt
      Modules/Registration/Common/test/itkLandmarkBasedTransformInitializerTest.cxx
    </FileList>

    <!--**
    ** If the migration can be accomplished by a simple string
    ** substitution, then use the following construct to define
    ** the substitution rule.
    **
    ** <MigrationFix-Automatic>
    **   <Old>
    **     <![CDATA[MipsleledName]]>
    **   </Old>
    **   <New>
    **     <![CDATA[MisspelledName]]>
    **   </New>
    ** </MigrationFix-Automatic>
    **-->

    <!--**
    ** 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>
    **   OldFunctionName
    ** </MigrationFix-Manual>
    **-->

</Change>
