18 #ifndef QGSRECTANGLE_H
19 #define QGSRECTANGLE_H
21 #include "qgis_core.h"
24 #include <QDomDocument>
67 mXmin = qRectF.topLeft().x();
68 mYmin = qRectF.topLeft().y();
69 mXmax = qRectF.bottomRight().x();
70 mYmax = qRectF.bottomRight().y();
76 mXmin = other.xMinimum();
77 mYmin = other.yMinimum();
78 mXmax = other.xMaximum();
79 mYmax = other.yMaximum();
118 void set(
double xMin,
double yMin,
double xMax,
double yMax )
153 mXmin = std::numeric_limits<double>::max();
154 mYmin = std::numeric_limits<double>::max();
155 mXmax = -std::numeric_limits<double>::max();
156 mYmax = -std::numeric_limits<double>::max();
189 std::swap( mXmin, mXmax );
193 std::swap( mYmin, mYmax );
238 double centerX, centerY;
246 centerX = mXmin + width() / 2;
247 centerY = mYmin + height() / 2;
249 scale( scaleFactor, centerX, centerY );
255 void scale(
double scaleFactor,
double centerX,
double centerY )
257 double newWidth = width() * scaleFactor;
258 double newHeight = height() * scaleFactor;
259 mXmin = centerX - newWidth / 2.0;
260 mXmax = centerX + newWidth / 2.0;
261 mYmin = centerY - newHeight / 2.0;
262 mYmax = centerY + newHeight / 2.0;
288 if ( p.
x() < xMinimum() )
289 setXMinimum( p.
x() );
290 else if ( p.
x() > xMaximum() )
291 setXMaximum( p.
x() );
292 if ( p.
y() < yMinimum() )
293 setYMinimum( p.
y() );
294 if ( p.
y() > yMaximum() )
295 setYMaximum( p.
y() );
306 return QgsRectangle( mXmin - width, mYmin - width, mXmax + width, mYmax + width );
315 if ( intersects( rect ) )
330 double x1 = ( mXmin > rect.mXmin ? mXmin : rect.mXmin );
331 double x2 = ( mXmax < rect.mXmax ? mXmax : rect.mXmax );
334 double y1 = ( mYmin > rect.mYmin ? mYmin : rect.mYmin );
335 double y2 = ( mYmax < rect.mYmax ? mYmax : rect.mYmax );
344 return ( rect.mXmin >= mXmin && rect.mXmax <= mXmax && rect.mYmin >= mYmin && rect.mYmax <= mYmax );
352 return mXmin <= p.
x() && p.
x() <= mXmax &&
353 mYmin <= p.
y() && p.
y() <= mYmax;
363 else if ( !rect.
isNull() )
365 mXmin = std::min( mXmin, rect.
xMinimum() );
366 mXmax = std::max( mXmax, rect.
xMaximum() );
367 mYmin = std::min( mYmin, rect.
yMinimum() );
368 mYmax = std::max( mYmax, rect.
yMaximum() );
381 mXmin = ( ( mXmin < x ) ? mXmin : x );
382 mXmax = ( ( mXmax > x ) ? mXmax : x );
384 mYmin = ( ( mYmin < y ) ? mYmin : y );
385 mYmax = ( ( mYmax > y ) ? mYmax : y );
395 combineExtentWith( point.
x(), point.
y() );
404 const double dx = std::max( std::max( mXmin - point.
x(), 0.0 ), point.
x() - mXmax );
405 const double dy = std::max( std::max( mYmin - point.
y(), 0.0 ), point.
y() - mYmax );
406 return std::sqrt( dx * dx + dy * dy );
458 QString asWktCoordinates()
const;
463 QString asWktPolygon()
const;
470 return QRectF(
static_cast< qreal
>( mXmin ),
static_cast< qreal
>( mYmin ),
static_cast< qreal
>( mXmax - mXmin ),
static_cast< qreal
>( mYmax - mYmin ) );
478 QString toString(
int precision = 16 )
const;
483 QString asPolygon()
const;
503 return ( !
operator==( r1 ) );
529 if ( std::isinf( mXmin ) || std::isinf( mYmin ) || std::isinf( mXmax ) || std::isinf( mYmax ) )
533 if ( std::isnan( mXmin ) || std::isnan( mYmin ) || std::isnan( mXmax ) || std::isnan( mYmax ) )
545 std::swap( mXmin, mYmin );
546 std::swap( mXmax, mYmax );
554 QgsBox3d toBox3d(
double zMin,
double zMax )
const;
557 operator QVariant()
const
559 return QVariant::fromValue( *
this );
571 SIP_PYOBJECT __repr__();
573 QString str = QStringLiteral(
"<QgsRectangle: %1>" ).arg( sipCpp->asWktCoordinates() );
574 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
603 return os << r.
toString().toLocal8Bit().data();
A 3-dimensional box composed of x, y, z coordinates.
A class to represent a 2D point.
A rectangle specified with double values.
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.
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 yMaximum() const SIP_HOLDGIL
Returns the y maximum value (top side of rectangle).
void include(const QgsPointXY &p)
Updates the rectangle to include the specified point.
double xMaximum() const SIP_HOLDGIL
Returns the x maximum value (right 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 QRectF &qRectF) SIP_HOLDGIL
Construct a rectangle from a QRectF. The rectangle is normalized after construction.
QgsRectangle(double xMin, double yMin=0, double xMax=0, double yMax=0) SIP_HOLDGIL
Constructor.
double xMinimum() const SIP_HOLDGIL
Returns the x minimum value (left side of rectangle).
double yMinimum() const SIP_HOLDGIL
Returns the y minimum value (bottom side of rectangle).
void setYMinimum(double y) SIP_HOLDGIL
Set the minimum y value.
bool intersects(const QgsRectangle &rect) const
Returns true when rectangle intersects with other rectangle.
void set(double xMin, double yMin, double xMax, double yMax)
Sets the rectangle from four points.
QgsRectangle(const QgsPointXY &p1, const QgsPointXY &p2) SIP_HOLDGIL
Construct a rectangle from two points. The rectangle is normalized after construction.
double area() const SIP_HOLDGIL
Returns the area of the rectangle.
bool operator!=(const QgsRectangle &r1) const
Comparison operator.
QRectF toRectF() const
Returns a QRectF with same coordinates as the rectangle.
bool isNull() const
Test if the rectangle is null (all coordinates zero or after call to setMinimal()).
void setXMaximum(double x) SIP_HOLDGIL
Set the maximum x value.
void setXMinimum(double x) SIP_HOLDGIL
Set the minimum x value.
double height() const SIP_HOLDGIL
Returns the height of the rectangle.
void grow(double delta)
Grows the rectangle in place by the specified amount.
void setYMaximum(double y) SIP_HOLDGIL
Set the maximum y value.
bool operator==(const QgsRectangle &r1) const
Comparison operator.
void set(const QgsPointXY &p1, const QgsPointXY &p2)
Sets the rectangle from two QgsPoints.
void setMinimal() SIP_HOLDGIL
Set a rectangle so that min corner is at max and max corner is at min.
double width() const SIP_HOLDGIL
Returns the width of the rectangle.
void combineExtentWith(const QgsRectangle &rect)
Expands the rectangle so that it covers both the original rectangle and the given rectangle.
QgsRectangle & operator=(const QgsRectangle &r1)
Assignment operator.
void normalize()
Normalize the rectangle so it has non-negative width/height.
bool isEmpty() const
Returns true if the rectangle is empty.
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.
QgsRectangle(const QgsRectangle &other) SIP_HOLDGIL
Copy constructor.
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.
double perimeter() const SIP_HOLDGIL
Returns the perimeter of the rectangle.
QgsPointXY center() const SIP_HOLDGIL
Returns the center point of the rectangle.
A class to represent a 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)
QgsInterval operator-(const QDateTime &dt1, const QDateTime &dt2)
Returns the interval between two datetimes.
QDateTime operator+(const QDateTime &start, const QgsInterval &interval)
Adds an interval to a datetime.
Q_DECLARE_METATYPE(QgsMeshTimeSettings)
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.