ITK  5.2.0
Insight Toolkit
itkSpatialOrientationAdapter.h
Go to the documentation of this file.
1 /*=========================================================================
2  *
3  * Copyright NumFOCUS
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
42 Max3(double x, double y, double z)
43 {
44  constexpr double obliquityThresholdCosineValue = 0.001;
45 
46  double absX = itk::Math::abs(x);
47  double absY = itk::Math::abs(y);
48  double absZ = itk::Math::abs(z);
49 
50  if ((absX > obliquityThresholdCosineValue) && (absX > absY) && (absX > absZ))
51  {
52  return 0;
53  }
54  else if ((absY > obliquityThresholdCosineValue) && (absY > absX) && (absY > absZ))
55  {
56  return 1;
57  }
58  else if ((absZ > obliquityThresholdCosineValue) && (absZ > absX) && (absZ > absY))
59  {
60  return 2;
61  }
62  // they must all be equal, so just say x
63  return 0;
64 }
65 
66 inline int
67 Sign(double x)
68 {
69  if (x < 0)
70  {
71  return -1;
72  }
73  return 1;
74 }
75 } // namespace Function
76 
81 class ITKCommon_EXPORT SpatialOrientationAdapter
82  : public OrientationAdapterBase<SpatialOrientation::ValidCoordinateOrientationFlags, 3>
83 {
84 public:
87 
88  using Superclass = OrientationAdapterBase<SpatialOrientation::ValidCoordinateOrientationFlags, 3>;
89 
91 
94 
96  SpatialOrientationAdapter() = default;
97 
100  FromDirectionCosines(const DirectionType & Dir) override;
101 
104  ToDirectionCosines(const OrientationType & Or) override;
105 };
106 } // namespace itk
107 
108 #endif // itkSpatialOrientationAdapter_h
itk::GTest::TypedefsAndConstructors::Dimension2::DirectionType
ImageBaseType::DirectionType DirectionType
Definition: itkGTestTypedefsAndConstructors.h:52
itk::SpatialOrientationAdapter::Superclass
OrientationAdapterBase< SpatialOrientation::ValidCoordinateOrientationFlags, 3 > Superclass
Definition: itkSpatialOrientationAdapter.h:88
itkOrientationAdapterBase.h
itkConceptChecking.h
itk::SpatialOrientationAdapter::DirectionType
Superclass::DirectionType DirectionType
Definition: itkSpatialOrientationAdapter.h:93
itk::SpatialOrientationAdapter
Converts SpatialOrientation flags to/from direction cosines.
Definition: itkSpatialOrientationAdapter.h:81
itk::Function::Max3
unsigned Max3(double x, double y, double z)
Definition: itkSpatialOrientationAdapter.h:42
itkSpatialOrientation.h
itk::Or
Definition: itkMetaProgrammingLibrary.h:113
itk::Function::Sign
int Sign(double x)
Definition: itkSpatialOrientationAdapter.h:67
itk
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
Definition: itkAnnulusOperator.h:24
itk::SpatialOrientation::ValidCoordinateOrientationFlags
ValidCoordinateOrientationFlags
Definition: itkSpatialOrientation.h:84