ITK  5.4.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  * https://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
30 #include "itkImageBase.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 {
83 public:
85 
87 
89 
92 
94  SpatialOrientationAdapter() = default;
95 
98  FromDirectionCosines(const DirectionType & Dir);
99 
102  ToDirectionCosines(const OrientationType & Or);
103 };
104 } // namespace itk
105 
106 #endif // itkSpatialOrientationAdapter_h
itk::GTest::TypedefsAndConstructors::Dimension2::DirectionType
ImageBaseType::DirectionType DirectionType
Definition: itkGTestTypedefsAndConstructors.h:52
itk::SpatialOrientationAdapter::DirectionType
typename ImageType::DirectionType DirectionType
Definition: itkSpatialOrientationAdapter.h:91
itk::ImageBase
Base class for templated image classes.
Definition: itkImageBase.h:114
itkConceptChecking.h
itk::SpatialOrientationEnums::ValidCoordinateOrientations
ValidCoordinateOrientations
Definition: itkSpatialOrientation.h:111
itk::Math::abs
bool abs(bool x)
Definition: itkMath.h:843
itk::SpatialOrientationAdapter
Converts SpatialOrientationEnums 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
itkImageBase.h