00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef __itkSpatialOrientationAdapter_h
00021 #define __itkSpatialOrientationAdapter_h
00022 #include "itkOrientationAdapter.h"
00023 #include "itkSpatialOrientation.h"
00024 #include "itkConceptChecking.h"
00025
00026 namespace itk
00027 {
00028
00029
00030
00031
00032 namespace Function
00033 {
00034
00035 inline unsigned Max3(double x, double y, double z)
00036 {
00037 const double obliquityThresholdCosineValue = 0.001;
00038
00039 double absX = vnl_math_abs(x);
00040 double absY = vnl_math_abs(y);
00041 double absZ = vnl_math_abs(z);
00042
00043 if ( ( absX > obliquityThresholdCosineValue ) && ( absX > absY ) && ( absX > absZ ))
00044 {
00045 return 0;
00046 }
00047 else if ( ( absY > obliquityThresholdCosineValue ) && ( absY > absX ) && ( absY > absZ ) )
00048 {
00049 return 1;
00050 }
00051 else if ( ( absZ > obliquityThresholdCosineValue ) && ( absZ > absX ) && ( absZ > absY ) )
00052 {
00053 return 2;
00054 }
00055
00056 return 0;
00057 }
00058
00059 inline int Sign(double x)
00060 {
00061 if(x < 0)
00062 {
00063 return -1;
00064 }
00065 return 1;
00066 }
00067
00068 }
00069
00070
00071
00075 class ITKCommon_EXPORT SpatialOrientationAdapter :
00076 public OrientationAdapterBase<SpatialOrientation::ValidCoordinateOrientationFlags,3>
00077 {
00078 public:
00080 typedef SpatialOrientationAdapter Self;
00081
00082 typedef OrientationAdapterBase<SpatialOrientation::ValidCoordinateOrientationFlags,3>
00083 SuperClass;
00084
00085 typedef SpatialOrientation::ValidCoordinateOrientationFlags OrientationType;
00086
00088 typedef SuperClass::DirectionType DirectionType;
00089
00091 SpatialOrientationAdapter() {};
00092
00094 virtual OrientationType FromDirectionCosines(const DirectionType &Dir);
00095
00097 virtual DirectionType ToDirectionCosines(const OrientationType &Or);
00098
00099 };
00100
00101 }
00102
00103 #endif // __itkSpatialOrientationAdapter_h
00104