Medical Imaging Interaction Toolkit  2026.06.00
Medical Imaging Interaction Toolkit
mitkPoint.h
Go to the documentation of this file.
1 /*============================================================================
2 
3 The Medical Imaging Interaction Toolkit (MITK)
4 
5 Copyright (c) German Cancer Research Center (DKFZ)
6 All rights reserved.
7 
8 Use of this source code is governed by a 3-clause BSD license that can be
9 found in the LICENSE file.
10 
11 ============================================================================*/
12 
13 #ifndef mitkPoint_h
14 #define mitkPoint_h
15 
16 #include <itkPoint.h>
17 
18 #include <mitkArray.h>
19 #include <mitkEqual.h>
20 #include <mitkNumericConstants.h>
21 
22 #include <nlohmann/json.hpp>
23 
24 namespace mitk
25 {
31  {
36  PTEND
37  };
38 
47  template <class TCoordRep, unsigned int NPointDimension = 3>
48  class Point : public itk::Point<TCoordRep, NPointDimension>
49  {
50  public:
52  explicit Point() : itk::Point<TCoordRep, NPointDimension>() {}
54  template <typename TPointValueType>
55  explicit Point(const Point<TPointValueType, NPointDimension> &r) : itk::Point<TCoordRep, NPointDimension>(r)
56  {
57  }
58 
59  template <typename TPointValueType>
60  explicit Point(const TPointValueType r[NPointDimension]) : itk::Point<TCoordRep, NPointDimension>(r)
61  {
62  }
63 
64  template <typename TPointValueType>
65  explicit Point(const TPointValueType &v) : itk::Point<TCoordRep, NPointDimension>(v)
66  {
67  }
68 
70  : itk::Point<TCoordRep, NPointDimension>(r)
71  {
72  }
74  Point(const TCoordRep r[NPointDimension]) : itk::Point<TCoordRep, NPointDimension>(r) {}
75  Point(const TCoordRep &v) : itk::Point<TCoordRep, NPointDimension>(v) {}
76  Point(const itk::Point<TCoordRep, NPointDimension> &p)
77  : itk::Point<TCoordRep, NPointDimension>(p)
78  {
79  }
80 
81  template <typename... Args,
82  typename = std::enable_if_t<(sizeof...(Args) == NPointDimension)>>
83  explicit Point(Args... args)
84  {
85  size_t i = 0;
86  ((this->GetDataPointer()[i++] = static_cast<TCoordRep>(args)), ...);
87  }
88 
96  template <typename ArrayType>
97  void FillPoint(const ArrayType &array)
98  {
99  itk::FixedArray<TCoordRep, NPointDimension> *thisP =
100  dynamic_cast<itk::FixedArray<TCoordRep, NPointDimension> *>(this);
101  mitk::FillArray<ArrayType, TCoordRep, NPointDimension>(*thisP, array);
102  }
103 
109  template <typename ArrayType>
110  void ToArray(ArrayType array) const
111  {
112  mitk::ToArray<ArrayType, TCoordRep, NPointDimension>(array, *this);
113  }
114  };
115 
117  template <class TCoordRep, unsigned int NPointDimension>
119  {
120  j = nlohmann::json::array();
121 
122  for (size_t i = 0; i < NPointDimension; ++i)
123  j.push_back(p[i]);
124  }
125 
127  template <class TCoordRep, unsigned int NPointDimension>
129  {
130  for (size_t i = 0; i < NPointDimension; ++i)
131  j.at(i).get_to(p[i]);
132  }
133 
137 
141 
152  template <typename TCoordRep, unsigned int NPointDimension>
153  inline bool Equal(const itk::Point<TCoordRep, NPointDimension> &point1,
154  const itk::Point<TCoordRep, NPointDimension> &point2,
155  TCoordRep eps = mitk::eps,
156  bool verbose = false)
157  {
158  bool isEqual = true;
159  typename itk::Point<TCoordRep, NPointDimension>::VectorType diff = point1 - point2;
160  for (unsigned int i = 0; i < NPointDimension; i++)
161  {
162  if (DifferenceBiggerOrEqualEps(diff[i], eps))
163  {
164  isEqual = false;
165  break;
166  }
167  }
168 
169  ConditionalOutputOfDifference(point1, point2, eps, verbose, isEqual);
170 
171  return isEqual;
172  }
173 
174 } // namespace mitk
175 
176 #endif
MITK point type extending itk::Point with additional constructors and utility methods.
Definition: mitkPoint.h:49
void ToArray(ArrayType array) const
Copy the values stored in this point into an array.
Definition: mitkPoint.h:110
Point(const TPointValueType r[NPointDimension])
Definition: mitkPoint.h:60
Point(const TCoordRep r[NPointDimension])
Definition: mitkPoint.h:74
Point(const TPointValueType &v)
Definition: mitkPoint.h:65
Point()
Default constructor.
Definition: mitkPoint.h:52
void FillPoint(const ArrayType &array)
Copy elements from an array into this point.
Definition: mitkPoint.h:97
Point(const TCoordRep &v)
Definition: mitkPoint.h:75
Point(const Point< TPointValueType, NPointDimension > &r)
Pass-through constructors for the Array base class.
Definition: mitkPoint.h:55
Point(const itk::Point< TCoordRep, NPointDimension > &p)
Definition: mitkPoint.h:76
Point(Args... args)
Definition: mitkPoint.h:83
Point(const mitk::Point< TCoordRep, NPointDimension > &r)
Definition: mitkPoint.h:69
Point & operator=(const mitk::Point< TCoordRep, NPointDimension > &)=default
nlohmann::json json
Find image slices visible on a given plane.
Point< int, 3 > Point3I
Definition: mitkPoint.h:139
Point< ScalarType, 3 > Point3D
Definition: mitkPoint.h:135
MITKCORE_EXPORT const ScalarType eps
Epsilon value for floating point comparison (vnl_math::eps * 100).
void from_json(const nlohmann::json &, GenericLookupTable< T > &)
Deserialize a GenericLookupTable from JSON.
Point< ScalarType, 4 > Point4D
Definition: mitkPoint.h:136
void ConditionalOutputOfDifference(ElementToOutput1 elem1, ElementToOutput2 elem2, mitk::ScalarType eps, bool verbose, bool isEqual)
Conditionally output the difference between two elements to the log.
Definition: mitkEqual.h:50
Point< ScalarType, 2 > Point2D
Definition: mitkPoint.h:134
PointSpecificationType
Enumeration of point specification types.
Definition: mitkPoint.h:31
@ PTEDGE
Definition: mitkPoint.h:35
@ PTEND
Definition: mitkPoint.h:36
@ PTCORNER
Definition: mitkPoint.h:34
@ PTSTART
Definition: mitkPoint.h:33
@ PTUNDEFINED
Definition: mitkPoint.h:32
Point< int, 4 > Point4I
Definition: mitkPoint.h:140
Point< int, 2 > Point2I
Definition: mitkPoint.h:138
void to_json(nlohmann::json &j, const GenericLookupTable< T > &t)
Serialize a GenericLookupTable to JSON.
bool DifferenceBiggerOrEqualEps(DifferenceType diff, mitk::ScalarType epsilon=mitk::eps)
Check if the absolute difference is bigger than or equal to a given epsilon.
Definition: mitkEqual.h:32
MITKNEWMODULE_EXPORT bool Equal(mitk::ExampleDataStructure *leftHandSide, mitk::ExampleDataStructure *rightHandSide, mitk::ScalarType eps, bool verbose)
Returns true if the example data structures are considered equal.