27#include <QDomDocument>
31using namespace Qt::StringLiterals;
102 mXmin = qRectF.topLeft().x();
103 mYmin = qRectF.topLeft().y();
104 mXmax = qRectF.bottomRight().x();
105 mYmax = qRectF.bottomRight().y();
110 mXmin = other.xMinimum();
111 mYmin = other.yMinimum();
112 mXmax = other.xMaximum();
113 mYmax = other.yMaximum();
155 void set(
double xMin,
double yMin,
double xMax,
double yMax,
bool normalize =
true )
197 mXmin = mYmin = std::numeric_limits<double>::max();
198 mXmax = mYmax = -std::numeric_limits<double>::max();
242 std::swap( mXmin, mXmax );
246 std::swap( mYmin, mYmax );
289 double centerX, centerY;
297 centerX = mXmin +
width() / 2;
298 centerY = mYmin +
height() / 2;
300 scale( scaleFactor, centerX, centerY );
306 void scale(
double scaleFactor,
double centerX,
double centerY )
308 const double newWidth =
width() * scaleFactor;
309 const double newHeight =
height() * scaleFactor;
310 mXmin = centerX - newWidth / 2.0;
311 mXmax = centerX + newWidth / 2.0;
312 mYmin = centerY - newHeight / 2.0;
313 mYmax = centerY + newHeight / 2.0;
392 if (
isNull() || rect.isNull() )
397 const double x1 = ( mXmin > rect.mXmin ? mXmin : rect.mXmin );
398 const double x2 = ( mXmax < rect.mXmax ? mXmax : rect.mXmax );
401 const double y1 = ( mYmin > rect.mYmin ? mYmin : rect.mYmin );
402 const double y2 = ( mYmax < rect.mYmax ? mYmax : rect.mYmax );
411 return ( rect.mXmin >= mXmin && rect.mXmax <= mXmax && rect.mYmin >= mYmin && rect.mYmax <= mYmax );
419 return mXmin <= p.x() && p.x() <= mXmax &&
420 mYmin <= p.y() && p.y() <= mYmax;
430 return mXmin <= x && x <= mXmax &&
431 mYmin <= y && y <= mYmax;
441 else if ( !rect.
isNull() )
443 mXmin = std::min( mXmin, rect.
xMinimum() );
444 mXmax = std::max( mXmax, rect.
xMaximum() );
445 mYmin = std::min( mYmin, rect.
yMinimum() );
446 mYmax = std::max( mYmax, rect.
yMaximum() );
459 mXmin = ( ( mXmin < x ) ? mXmin : x );
460 mXmax = ( ( mXmax > x ) ? mXmax : x );
462 mYmin = ( ( mYmin < y ) ? mYmin : y );
463 mYmax = ( ( mYmax > y ) ? mYmax : y );
482 const double dx = std::max( std::max( mXmin - point.
x(), 0.0 ), point.
x() - mXmax );
483 const double dy = std::max( std::max( mYmin - point.
y(), 0.0 ), point.
y() - mYmax );
484 return std::sqrt( dx * dx + dy * dy );
535 return ( std::isnan( mXmin ) && std::isnan( mXmax ) && std::isnan( mYmin ) && std::isnan( mYmax ) ) ||
551 if ( ( !
isFinite() ) || ( mXmax <= mXmin ) || ( mYmax <= mYmin ) )
572 return ( std::isinf( mXmin ) || mXmin == std::numeric_limits<double>::lowest() )
573 && ( std::isinf( mYmin ) || mYmin == std::numeric_limits<double>::lowest() )
574 && ( std::isinf( mXmax ) || mXmax == std::numeric_limits<double>::max() )
575 && ( std::isinf( mYmax ) || mYmax == std::numeric_limits<double>::max() );
581 Q_INVOKABLE QString asWktCoordinates()
const;
586 Q_INVOKABLE QString asWktPolygon()
const;
593 return QRectF(
static_cast< qreal
>( mXmin ),
static_cast< qreal
>( mYmin ),
static_cast< qreal
>( mXmax - mXmin ),
static_cast< qreal
>( mYmax - mYmin ) );
601 Q_INVOKABLE QString toString(
int precision = 16 )
const;
606 QString asPolygon()
const;
620 return ( !
operator==( r1 ) );
646 if ( std::isinf( mXmin ) || std::isinf( mYmin ) || std::isinf( mXmax ) || std::isinf( mYmax ) )
650 if ( std::isnan( mXmin ) || std::isnan( mYmin ) || std::isnan( mXmax ) || std::isnan( mYmax ) )
662 std::swap( mXmin, mYmin );
663 std::swap( mXmax, mYmax );
670 QgsBox3D toBox3d(
double zMin,
double zMax )
const;
673 operator QVariant()
const
675 return QVariant::fromValue( *
this );
687 SIP_PYOBJECT __repr__();
690 if ( sipCpp->isNull() )
691 str = u
"<QgsRectangle()>"_s;
693 str = u
"<QgsRectangle: %1>"_s.arg( sipCpp->asWktCoordinates() );
694 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
700 double mXmin = std::numeric_limits<double>::max();
701 double mYmin = std::numeric_limits<double>::max();
702 double mXmax = -std::numeric_limits<double>::max();
703 double mYmax = -std::numeric_limits<double>::max();
723 return os << r.
toString().toLocal8Bit().data();
A 3-dimensional box composed of x, y, z coordinates.
A rectangle specified with double values.
Q_INVOKABLE QString toString(int precision=16) const
Returns a string representation of form xmin,ymin : xmax,ymax Coordinates will be truncated to the sp...
void scale(double scaleFactor, const QgsPointXY *c=nullptr)
Scale the rectangle around its center point.
bool contains(const QgsRectangle &rect) const
Returns true when rectangle contains other rectangle.
Q_DECL_DEPRECATED void setMinimal()
Set a rectangle so that min corner is at max and max corner is at min.
void combineExtentWith(const QgsPointXY &point)
Expands the rectangle so that it covers both the original rectangle and the given point.
QgsRectangle()=default
Constructor for a null rectangle.
double area() const
Returns the area of the rectangle.
void include(const QgsPointXY &p)
Updates the rectangle to include the specified point.
bool isMaximal() const
Test if the rectangle is the maximal possible rectangle.
double xMinimum() const
Returns the x minimum value (left side of rectangle).
void combineExtentWith(double x, double y)
Expands the rectangle so that it covers both the original rectangle and the given point.
QgsRectangle(const QgsPointXY &p1, const QgsPointXY &p2, bool normalize=true)
Construct a rectangle from two points.
bool contains(double x, double y) const
Returns true when rectangle contains the point at (x, y).
static QgsRectangle fromWkt(const QString &wkt)
Creates a new rectangle from a wkt string.
void setYMinimum(double y)
Set the minimum y value.
bool intersects(const QgsRectangle &rect) const
Returns true when rectangle intersects with other rectangle.
double yMinimum() const
Returns the y minimum value (bottom side of rectangle).
bool operator!=(const QgsRectangle &r1) const
void setXMinimum(double x)
Set the minimum x value.
double width() const
Returns the width of the rectangle.
QRectF toRectF() const
Returns a QRectF with same coordinates as the rectangle.
double xMaximum() const
Returns the x maximum value (right side of rectangle).
bool isNull() const
Test if the rectangle is null (holding no spatial information).
QgsRectangle(const QgsRectangle &other)
double yMaximum() const
Returns the y maximum value (top side of rectangle).
QgsRectangle & operator=(const QgsRectangle &r1)
void set(const QgsPointXY &p1, const QgsPointXY &p2, bool normalize=true)
Sets the rectangle from two QgsPoints.
void setYMaximum(double y)
Set the maximum y value.
QgsPointXY center() const
Returns the center point of the rectangle.
void setXMaximum(double x)
Set the maximum x value.
void grow(double delta)
Grows the rectangle in place by the specified amount.
bool operator==(const QgsRectangle &r1) const
bool isValid() const
Test if the rectangle is valid.
void combineExtentWith(const QgsRectangle &rect)
Expands the rectangle so that it covers both the original rectangle and the given rectangle.
double perimeter() const
Returns the perimeter of the rectangle.
void set(double xMin, double yMin, double xMax, double yMax, bool normalize=true)
Sets the rectangle from four points.
void normalize()
Normalize the rectangle so it has non-negative width/height.
bool isEmpty() const
Returns true if the rectangle has no area.
QgsRectangle(const QRectF &qRectF)
Construct a rectangle from a QRectF.
static QgsRectangle fromCenterAndSize(const QgsPointXY ¢er, double width, double height)
Creates a new rectangle, given the specified center point and width and height.
double height() const
Returns the height of the rectangle.
void setNull()
Mark a rectangle as being null (holding no spatial information).
bool contains(const QgsPointXY &p) const
Returns true when rectangle contains a point.
QgsRectangle buffered(double width) const
Gets rectangle enlarged by buffer.
void scale(double scaleFactor, double centerX, double centerY)
Scale the rectangle around its center point.
QgsRectangle intersect(const QgsRectangle &rect) const
Returns the intersection with the given rectangle.
void invert()
Swap x/y coordinates in the rectangle.
bool isFinite() const
Returns true if the rectangle has finite boundaries.
double distance(const QgsPointXY &point) const
Returns the distance from point to the nearest point on the boundary of the rectangle.
Represent a 2-dimensional vector.
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into c
bool qgsDoubleNear(double a, double b, double epsilon=4 *std::numeric_limits< double >::epsilon())
Compare two doubles (but allow some difference).
Q_DECLARE_METATYPE(QgsDatabaseQueryLogEntry)
QgsInterval operator-(QDate date1, QDate date2)
Returns the interval between two dates.
QDateTime operator+(const QDateTime &start, const QgsInterval &interval)
Adds an interval to a datetime.
CORE_EXPORT QDataStream & operator<<(QDataStream &out, const QgsRectangle &rectangle)
Writes the list rectangle to stream out.
CORE_EXPORT QDataStream & operator>>(QDataStream &in, QgsRectangle &rectangle)
Reads a rectangle from stream in into rectangle.