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);
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); }
243 template <
typename intT>
244 inline ostream&
operator<<(ostream& s,
const ML_NAMESPACE::TSubImageBox<intT> &box)
246 return s << box.v1 <<
" " << box.v2;
263template <
typename intT>
269 if (V1.x<V2.x){
v1.x=V1.x;
v2.x=V2.x; }
else{
v1.x=V2.x;
v2.x=V1.x; }
270 if (V1.y<V2.y){
v1.y=V1.y;
v2.y=V2.y; }
else{
v1.y=V2.y;
v2.y=V1.y; }
271 if (V1.z<V2.z){
v1.z=V1.z;
v2.z=V2.z; }
else{
v1.z=V2.z;
v2.z=V1.z; }
272 if (V1.c<V2.c){
v1.c=V1.c;
v2.c=V2.c; }
else{
v1.c=V2.c;
v2.c=V1.c; }
273 if (V1.t<V2.t){
v1.t=V1.t;
v2.t=V2.t; }
else{
v1.t=V2.t;
v2.t=V1.t; }
274 if (V1.u<V2.u){
v1.u=V1.u;
v2.u=V2.u; }
else{
v1.u=V2.u;
v2.u=V1.u; }
281template <
typename intT>
293template <
typename intT>
296 if (loc1.
isEmpty()){
return loc2; }
else
297 if (loc2.
isEmpty()){
return loc1; }
else
309template <
typename intT>
TSubImageBox< intT > merge(const TSubImageBox< intT > &box) const
Member function version to merge this with a given box.
void translate(const VectorType &offsetVector)
Shifts the entire box by an offset given by offsetVector.
TSubImageBox< intT > intersect(const TSubImageBox< intT > &box) const
Member function version to intersect this with a given box.
static TSubImageBox< intT > intersect(const TSubImageBox< intT > &box1, const TSubImageBox< intT > &box2)
TImageVector< intT > VectorType
The vector type used for corner members v1 and v2.
static void get3DCorners(const TSubImageBox< intT > &box, VectorType corners[8])
bool operator!=(const TSubImageBox< intT > &box) const
Returns false if box has identical components; otherwise, it returns true.
TSubImageBox(const VectorType &vector1, const VectorType &vector2)
bool contains(const VectorType &position) const
Returns true if position is inside the SubImageBox.
VectorType clamp(const VectorType &position) const
bool operator==(const TSubImageBox< intT > &box) const
Returns true if box has identical components; otherwise, it returns false.
static TSubImageBox< intT > merge(const TSubImageBox< intT > &box1, const TSubImageBox< intT > &box2)
intT getNumVoxels() const
TSubImageBox(const VectorType extent)
VectorType getExtent() const
TVector< TVectorBase > compMin(const TVector< TVectorBase > &b) const
Returns the component-wise minimum of components of this and b.
TVector< TVectorBase > compMax(const TVector< TVectorBase > &b) const
Returns the component-wise maximum of components of this and b.
ComponentType compMul() const
TSubImageBox< MLint > SubImageBox
Defines the standard SubImageBox type used in the ML. Its size varies with the size of the MLint type...
TImageVector< MLint > ImageVector
Defines the standard ImageVector type that is used by the ML for indexing and coordinates.
MLEXPORT std::ostream & operator<<(std::ostream &s, const ml::Field &v)
Overloads the operator '<<' for stream output of Field objects.