[Insight-developers] ITKImageFunction dependecy in Transform

M Stauffer (V) mstauff at verizon.net
Fri Aug 19 13:08:09 EDT 2011


>> This issue has popped up again, see below...
>>
>>>>>>> In rebasing the Transform changes patch set onto the latest
>>>>>>itk master, I've
>>>>>>> got a dependency problem. DeformationFieldTransform
>>>>>>> includes itkVectorLinearInterpolateImageFunction.h, which is
>>>>>>> in ITKImageFunction. But adding this to
>>>>>>Transform/itk-module.cmake causes a
>>>>>>> circular dependency. Any suggestions? I don't know how to
>>>>>>handle this.
>>>>>>
>>>>>>That is a difficult problem.  Moving DeformationFieldTransform to
>>>>>>ITKImageFunction would probably not be appropriate.  Is it
>>>>possible to
>>>>>>use a C++ forward declaration for
>>>>>>VectorLinearInterpolateImageFunction?  I assume that any module
>>>>>>depending on ITKTransform is also likely to depend on
>>>>ITKImageFunction
>>>>>>anyway.
>>>>>
>>>>> OK, a forward declare works. Of course I have to declare
>>>the template
>>>>> parrameters along with the forward declaration so it's a
>>>>little messy in
>>>>> that it will need changing if the
>>>>VectorLinearInterpolateImageFunction
>>>>> template parameters change. Although if the class template
>>>>pararmeters
>>>>> change, lots of classes will change so I figure that's not a real
>>>>> problem. So is forward-declaration like this ok in the ITK style?
>>>>
>>>>Great.
>>>>
>>>>ITK has very strong backwards compatibility, changes to the API like
>>>>that will not take place after the ITKv4 release, and changes that
>>>>break compatibility during ITKv4 need to have migration documents.
>>>>http://www.vtk.org/Wiki/ITK_Release_4/Users_Migration_Guide
>>>>
>>>>Forward declaration is not typical ITK style.  However, if it is
>>>>documented with a comment in the code explaining the need to break
>>>>circular dependency, it could be OK.
>>>>
>>
>> It turns out this has worked only because the cxx files where
>> itkDisplacementTransform.h is included also include
>> itkVectorInterpolateImageFunction.h and
>> itkVectorLinearIntepolateImageFunction.h. Of course these have to be
>> included somewhere for the forward-declare to work, but this 
>seems bad
>> for the use to have to include these other two headers separately.
>>
>> Looking at Core/ImageFunction, the only class that includes 
>Transform is
>> RayCastInterpolateImageFunction. Would it make sense to move this to
>> another module so that ImageFunction needn't depend on Transform?
>>
>
>Good detective work.  Maybe move RayCastInterpolateImageFunction to
>Core/Common instead of the forward declare?
>
>Thanks,
>Matt

OK I've tried that and it works. I removed ITKTransform as a dependency
of ITKImageFunction, and added ITKImageFunction as a dependency of
ITKTransform. I moved RayCastInterpolateImageFunction to Core/Common.

What's the protocol for going ahead with a move like this? Doesn't seem
like much of a change since RayCastInterpolateImageFunction is still in
Core. Matt, do you feel ok giving the final go-ahead for this, or do we
get other approval too?

-M



More information about the Insight-developers mailing list