MeVisLab Toolbox Reference
mlSubImageBoxd.h
Go to the documentation of this file.
1 /*************************************************************************************
2 **
3 ** Copyright 2007, MeVis Medical Solutions AG
4 **
5 ** The user may use this file in accordance with the license agreement provided with
6 ** the Software or, alternatively, in accordance with the terms contained in a
7 ** written agreement between the user and MeVis Medical Solutions AG.
8 **
9 ** For further information use the contact form at https://www.mevislab.de/contact
10 **
11 **************************************************************************************/
12 
13 #ifndef ML_SUB_IMAGE_BOXD_H
14 #define ML_SUB_IMAGE_BOXD_H
15 
19 
20 #include "mlInitSystemML.h"
21 #include "mlSubImageBox.h"
22 #include "mlLinearAlgebra.h"
23 
24 ML_START_NAMESPACE
25 
26 //-------------------------------------------------------------------------
31 //-------------------------------------------------------------------------
33 {
34 
35 public:
36 
41 
44 
45  //------------------------------------------------------
48  //------------------------------------------------------
50  inline SubImageBoxd()
51  {
52  v1=Vector6(0);
53  v2=Vector6(-1);
54  }
55 
58  inline SubImageBoxd(const Vector6& vector1, const Vector6& vector2) : v1(vector1), v2(vector2)
59  {
60  }
61 
63  inline SubImageBoxd(const Vector6& extent) : v1(0), v2(extent)
64  {
65  }
66 
72 
73 
74 
75  //------------------------------------------------------
78  //------------------------------------------------------
80  inline bool operator==(const SubImageBoxd& box) const
81  {
82  return (v1==box.v1) && (v2==box.v2);
83  }
84 
86  inline bool operator!=(const SubImageBoxd& box) const
87  {
88  return !operator==(box);
89  }
90 
93  inline bool isEmpty() const
94  {
95  return (v1[0]>v2[0]) || (v1[1]>v2[1]) || (v1[2]>v2[2]) || (v1[3]>v2[3]) || (v1[4]>v2[4]) || (v1[5]>v2[5]);
96  }
97 
99  inline Vector6 getExtent() const
100  {
101  if (isEmpty())
102  {
103  return Vector6(0);
104  }
105  else
106  {
107  return v2-v1;
108  }
109  }
110 
114 
115  //------------------------------------------------------
118  //------------------------------------------------------
120  inline static SubImageBoxd intersect(const SubImageBoxd& box1, const SubImageBoxd& box2)
121  {
122  SubImageBoxd result;
123  // If for any component result holds (result.v1[0]>result.v2[0] ||
124  // result.v1[1]>result.v1[1] || result.v1[2]>result.v1[2] ... ), the
125  // intersection is interpreted as empty! This holds especially if
126  // if loc1 or loc2 are already empty!
127  result.v1 = compMax(box1.v1, box2.v1);
128  result.v2 = compMin(box1.v2, box2.v2);
129  return result;
130  }
131 
133  inline void makeEmpty()
134  {
135  v1 = Vector6(0);
136  v2 = Vector6(-1);
137  }
138 
141  {
142  return SubImageBoxd::intersect(*this, box);
143  }
144 
147  inline Vector6 clamp(const Vector6& position)
148  {
149  return compMax(compMin(position, v2), v1);
150  }
151 
154  MLEXPORT static SubImageBoxd calcAATransformedBox(const SubImageBox& box, const Matrix4& matrix);
156 
157 
158 #if ML_DEPRECATED_SINCE(3,5,0)
159 
162 
163 public:
164 
167  inline ML_DEPRECATED Vector6 getExt() const { return getExtent(); }
168 
170 
171 #endif
172 
173 }; // end of SubImageBoxd
174 
175 
176 #if ML_DEPRECATED_SINCE(3,5,0)
181 ML_DEPRECATED typedef SubImageBoxd SubImgBoxf;
183 #endif
184 
185 
186 
187 ML_END_NAMESPACE
188 
189 
190 //-----------------------------------------------------------------------------------
191 // Stream output for std::ostream
192 //-----------------------------------------------------------------------------------
193 namespace std {
194 
196  inline ostream& operator<<(ostream& s, const ML_NAMESPACE::SubImageBoxd &box)
197  {
198  return s << "(" << box.v1 << ")(" << box.v2 << ")";
199  }
200 
201 }
202 
203 #endif // __mlSubImageBoxd_H
204 
205 
206 
207 
#define ML_DEPRECATED
Definition: CSOGroup.h:371
SubImageBoxd - SubImageBox with coordinates of float data type.
bool operator!=(const SubImageBoxd &box) const
Returns true if both boxes are identical.
MLEXPORT SubImageBoxd(const SubImageBox &box)
Constructor: Create a box from an integer box.
Vector6 v2
Corner v2 of the box region.
SubImageBoxd()
Constructor: Constructs an empty region, i.e., v2 < v1.
bool operator==(const SubImageBoxd &box) const
Returns true if both boxes are identical.
void makeEmpty()
Makes box empty, restores constructor state.
SubImageBoxd(const Vector6 &vector1, const Vector6 &vector2)
Constructor: Subimage box is defined by both corner points vector1 and vector2.
Vector6 getExtent() const
Returns distance vector between v1 and v2, i.e., returns extents of the box.
MLEXPORT void correct()
Swaps all components where v1.* > v2.*.
static SubImageBoxd intersect(const SubImageBoxd &box1, const SubImageBoxd &box2)
Returns intersection of box1 and box2.
static MLEXPORT SubImageBoxd calcAATransformedBox(const SubImageBox &box, const Matrix4 &matrix)
Returns axis aligned bounding box of all corners of box transformed with matrix.
bool isEmpty() const
Returns true if any component of v1 is greater than the corresponding one of v2 (which is defined as ...
Vector6 clamp(const Vector6 &position)
Clamps the position to the nearest position inside the SubImageBox.
Vector6 v1
Corner v1 of the box region.
SubImageBoxd intersect(const SubImageBoxd &box)
Memberfunction version to intersect this with a given box.
SubImageBoxd(const Vector6 &extent)
Constructor: Create a box with origin (0,0,0,0,0,0) and a given extent.
MLEXPORT std::ostream & operator<<(std::ostream &s, const ml::Field &v)
Overloads the operator "<<" for stream output of Field objects.
#define MLEXPORT
To export symbols from a dll/shared object, we need to mark them with the MLEXPORT symbol.
MLWEM_EXPORT void intersect(WEMTrianglePatch *inPatch1, WEMTrianglePatch *inPatch2, WEMTrianglePatch *outPatch, unsigned int outputMode, TriangulationModes triangulationMode, WEMVector< WEMCut > *cuts=nullptr)
Returns the intersection of the given patches.
FloatingPointVector< T, size, DataContainer > compMax(FloatingPointVector< T, size, DataContainer > buffer1, const FloatingPointVector< T, size, DataContainer > &buffer2)
Component wise maximum of buffer1 and buffer2.
bool operator==(const Tmat2< DT > &a, const Tmat2< DT > &b)
a == b ? Return true if yes.
Definition: mlMatrix2.h:425
Tvec6< MLdouble > Vector6
A vector with 6 components of type double.
Definition: mlVector6.h:194
FloatingPointVector< T, size, DataContainer > compMin(FloatingPointVector< T, size, DataContainer > buffer1, const FloatingPointVector< T, size, DataContainer > &buffer2)
Component wise minimum of buffer1 and buffer2.