Merge pull request #9286 from alalek:rect_size_empty

pull/9297/head
Alexander Alekhin 7 years ago
commit d8c70e2e73
  1. 21
      modules/core/include/opencv2/core/types.hpp
  2. 4
      modules/core/misc/java/src/java/core+Rect.java
  3. 4
      modules/core/misc/java/src/java/core+Rect2d.java
  4. 4
      modules/core/misc/java/src/java/core+Size.java

@ -301,6 +301,8 @@ public:
Size_& operator = (const Size_& sz);
//! the area (width*height)
_Tp area() const;
//! true if empty
bool empty() const;
//! conversion of another data type.
template<typename _Tp2> operator Size_<_Tp2>() const;
@ -400,6 +402,8 @@ public:
Size_<_Tp> size() const;
//! area (width*height) of the rectangle
_Tp area() const;
//! true if empty
bool empty() const;
//! conversion to another data type
template<typename _Tp2> operator Rect_<_Tp2>() const;
@ -1599,6 +1603,13 @@ _Tp Size_<_Tp>::area() const
return result;
}
template<typename _Tp> inline
bool Size_<_Tp>::empty() const
{
return width <= 0 || height <= 0;
}
template<typename _Tp> static inline
Size_<_Tp>& operator *= (Size_<_Tp>& a, _Tp b)
{
@ -1741,6 +1752,12 @@ _Tp Rect_<_Tp>::area() const
return result;
}
template<typename _Tp> inline
bool Rect_<_Tp>::empty() const
{
return width <= 0 || height <= 0;
}
template<typename _Tp> template<typename _Tp2> inline
Rect_<_Tp>::operator Rect_<_Tp2>() const
{
@ -1803,10 +1820,10 @@ Rect_<_Tp>& operator &= ( Rect_<_Tp>& a, const Rect_<_Tp>& b )
template<typename _Tp> static inline
Rect_<_Tp>& operator |= ( Rect_<_Tp>& a, const Rect_<_Tp>& b )
{
if (!a.area()) {
if (a.empty()) {
a = b;
}
else if (b.area()) {
else if (!b.empty()) {
_Tp x1 = std::min(a.x, b.x);
_Tp y1 = std::min(a.y, b.y);
a.width = std::max(a.x + a.width, b.x + b.width) - x1;

@ -65,6 +65,10 @@ public class Rect {
return width * height;
}
public boolean empty() {
return width <= 0 || height <= 0;
}
public boolean contains(Point p) {
return x <= p.x && p.x < x + width && y <= p.y && p.y < y + height;
}

@ -65,6 +65,10 @@ public class Rect2d {
return width * height;
}
public boolean empty() {
return width <= 0 || height <= 0;
}
public boolean contains(Point p) {
return x <= p.x && p.x < x + width && y <= p.y && p.y < y + height;
}

@ -37,6 +37,10 @@ public class Size {
return width * height;
}
public boolean empty() {
return width <= 0 || height <= 0;
}
public Size clone() {
return new Size(width, height);
}

Loading…
Cancel
Save