ITK  5.0.0
Insight Segmentation and Registration Toolkit
itkSpatialOrientationAdapter.h
Go to the documentation of this file.
1 /*=========================================================================
2  *
3  * Copyright Insight Software Consortium
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0.txt
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *=========================================================================*/
18 /*=========================================================================
19  *
20  * Portions of this file are subject to the VTK Toolkit Version 3 copyright.
21  *
22  * Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
23  *
24  * For complete copyright, license and disclaimer of warranty information
25  * please refer to the NOTICE file at the top of the ITK source tree.
26  *
27  *=========================================================================*/
28 #ifndef itkSpatialOrientationAdapter_h
29 #define itkSpatialOrientationAdapter_h
31 #include "itkSpatialOrientation.h"
32 #include "itkConceptChecking.h"
33 
34 namespace itk
35 {
36 //
37 // Helper functions, better than Macros
38 //
39 namespace Function
40 {
41 inline unsigned Max3(double x, double y, double z)
42 {
43  constexpr double obliquityThresholdCosineValue = 0.001;
44 
45  double absX = itk::Math::abs(x);
46  double absY = itk::Math::abs(y);
47  double absZ = itk::Math::abs(z);
48 
49  if ( ( absX > obliquityThresholdCosineValue ) && ( absX > absY ) && ( absX > absZ ) )
50  {
51  return 0;
52  }
53  else if ( ( absY > obliquityThresholdCosineValue ) && ( absY > absX ) && ( absY > absZ ) )
54  {
55  return 1;
56  }
57  else if ( ( absZ > obliquityThresholdCosineValue ) && ( absZ > absX ) && ( absZ > absY ) )
58  {
59  return 2;
60  }
61  // they must all be equal, so just say x
62  return 0;
63 }
64 
65 inline int Sign(double x)
66 {
67  if ( x < 0 )
68  {
69  return -1;
70  }
71  return 1;
72 }
73 } // namespace Function
74 
79 class ITKCommon_EXPORT SpatialOrientationAdapter:
80  public OrientationAdapterBase< SpatialOrientation::ValidCoordinateOrientationFlags, 3 >
81 {
82 public:
85 
86  using Superclass = OrientationAdapterBase< SpatialOrientation::ValidCoordinateOrientationFlags, 3 >;
87 
89 
92 
94  SpatialOrientationAdapter() = default;
95 
97  OrientationType FromDirectionCosines(const DirectionType & Dir) override;
98 
100  DirectionType ToDirectionCosines(const OrientationType & Or) override;
101 };
102 } // namespace itk
103 
104 #endif // itkSpatialOrientationAdapter_h
Converts SpatialOrientation flags to/from direction cosines.
unsigned Max3(double x, double y, double z)
OrientationAdapterBase< SpatialOrientation::ValidCoordinateOrientationFlags, 3 > Superclass