13 #ifndef ML_SUB_IMAGE_BOX_H
14 #define ML_SUB_IMAGE_BOX_H
104 return (v1==box.
v1) && (v2==box.
v2);
110 return (v1!=box.
v1) || (v2!=box.
v2);
118 return (v1.x>v2.x) || (v1.y>v2.y) || (v1.z>v2.z) || (v1.c>v2.c) || (v1.t>v2.t) || (v1.u>v2.u);
202 return (position >= v1) && (position <= v2);
208 v1 = v1+offsetVector;
209 v2 = v2+offsetVector;
218 for (
int c=0; c < 8; c++){ corners[c] =
ImageVector(0); }
235 #if ML_DEPRECATED_SINCE(3,5,0)
244 inline ML_DEPRECATED intT getSize()
const {
return getNumVoxels(); }
247 inline ML_DEPRECATED VectorType getExt()
const {
return getExtent(); }
255 #if ML_DEPRECATED_SINCE(3,5,0)
260 #define TSubImgBox TSubImageBox
273 template <
typename intT>
274 inline ostream&
operator<<(ostream& s,
const ML_NAMESPACE::TSubImageBox<intT> &box)
276 return s << box.v1 <<
" " << box.v2;
287 #if ML_DEPRECATED_SINCE(3,5,0)
316 template <
typename intT>
322 if (V1.x<V2.x){ v1.x=V1.x; v2.x=V2.x; }
else{ v1.x=V2.x; v2.x=V1.x; }
323 if (V1.y<V2.y){ v1.y=V1.y; v2.y=V2.y; }
else{ v1.y=V2.y; v2.y=V1.y; }
324 if (V1.z<V2.z){ v1.z=V1.z; v2.z=V2.z; }
else{ v1.z=V2.z; v2.z=V1.z; }
325 if (V1.c<V2.c){ v1.c=V1.c; v2.c=V2.c; }
else{ v1.c=V2.c; v2.c=V1.c; }
326 if (V1.t<V2.t){ v1.t=V1.t; v2.t=V2.t; }
else{ v1.t=V2.t; v2.t=V1.t; }
327 if (V1.u<V2.u){ v1.u=V1.u; v2.u=V2.u; }
else{ v1.u=V2.u; v2.u=V1.u; }
334 template <
typename intT>
346 template <
typename intT>
349 if (loc1.
isEmpty()){
return loc2; }
else
350 if (loc2.
isEmpty()){
return loc1; }
else
362 template <
typename intT>
void set(const ComponentType v=0)
Sets all components to v or - if v is not specified - to 0.
This class defines a rectangular subimage region of standard ML dimensions.
TSubImageBox()
Constructor: Creates empty subimage region by setting v1 to (0,...,0) and v2 to (-1,...
void makeEmpty()
Makes box empty by setting v1 to (0,...,0) and v2 to (-1,...,-1), i.e., constructor state is restored...
void translate(const VectorType &offsetVector)
Shifts the whole box by an offset given by offsetVector.
VectorType v1
Corner v1 of the subimage region (included in region).
static TSubImageBox< intT > intersect(const TSubImageBox< intT > &box1, const TSubImageBox< intT > &box2)
Returns the overlapping region of subimage regions box1 and box2.
TImageVector< intT > VectorType
The vector type used for corner members v1 and v2.
static void get3DCorners(const TSubImageBox< intT > &box, VectorType corners[8])
Returns the corners of the 3d box extents of box in corners.
bool operator!=(const TSubImageBox< intT > &box) const
Returns false if box has identical components like this, otherwise return true.
void correct()
Swaps all components where v1.
TSubImageBox(const VectorType &vector1, const VectorType &vector2)
Constructor: Creates subimage from two passed vectors vector1 and vector2.
bool contains(const VectorType &position) const
Returns true if position is inside the SubImageBox.
VectorType v2
Corner v2 of the subimage region (also included in region!).
TSubImageBox< intT > intersect(const TSubImageBox< intT > &box) const
Member function version to intersect this with a given box.
VectorType clamp(const VectorType &position) const
Clamps the position to the nearest position inside the SubImageBox.
bool operator==(const TSubImageBox< intT > &box) const
Returns true if box has identical components like this, otherwise returns false.
static TSubImageBox< intT > merge(const TSubImageBox< intT > &box1, const TSubImageBox< intT > &box2)
Returns the region containing both subimage regions box1 and box2.
TSubImageBox< intT > merge(const TSubImageBox< intT > &box) const
Member function version to merge this with a given box.
intT getNumVoxels() const
Returns number of voxels in the subimage region, i.e., the product of all extents if this is not empt...
TSubImageBox(const VectorType extent)
Constructor: Creates subimage from an extent, i.e., v1 is set to (0,...,0) and v2 is set to (extent....
bool isEmpty() const
Returns true if subimage region is empty, i.e., if any of the components of v1 is greater than the co...
VectorType getExtent() const
Returns the extents of the subimage region.
MLEXPORT std::ostream & operator<<(std::ostream &s, const ml::Field &v)
Overloads the operator "<<" for stream output of Field objects.
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.
FloatingPointVector< T, size, DataContainer > clamp(FloatingPointVector< T, size, DataContainer > vec, const FloatingPointVector< T, size, DataContainer > &lower, const FloatingPointVector< T, size, DataContainer > &upper)
Returns a new vector with all components from vec clamped to range [lower, upper].
T compMul(const FloatingPointVector< T, size, DataContainer > &vec)
Returns the product of all components.
TSubImageBox< MLint > SubImageBox
Define the standard SubImageBox type used in the ML. Its size varies with the size of the MLint type.
FloatingPointVector< T, size, DataContainer > compMin(FloatingPointVector< T, size, DataContainer > buffer1, const FloatingPointVector< T, size, DataContainer > &buffer2)
Component wise minimum of buffer1 and buffer2.
TImageVector< MLint > ImageVector
Defines the standard ImageVector type which is used by the ML for indexing and coordinates.