31    mCenter[0] = 
center.at( 0 );
 
   32    mCenter[1] = 
center.at( 1 );
 
   33    mCenter[2] = 
center.at( 2 );
 
   37    for ( 
int i = 0; i < 9; ++i )
 
 
   51    for ( 
int i = 0; i < 3; ++i )
 
   53      mHalfAxes[
static_cast< int >( i * 3 )] = 
halfAxes.at( i ).x();
 
   54      mHalfAxes[
static_cast< int >( i * 3 + 1 )] = 
halfAxes.at( i ).y();
 
   55      mHalfAxes[
static_cast< int >( i * 3 + 2 )] = 
halfAxes.at( i ).z();
 
 
   64    QgsVector3D( box.width() * 0.5, 0, 0 ),
 
   65    QgsVector3D( 0, box.height() * 0.5, 0 ),
 
   66    QgsVector3D( 0, 0, box.depth() * 0.5 )
 
 
   72  return std::isnan( mCenter[0] ) || std::isnan( mCenter[1] ) || std::isnan( mCenter[2] );
 
 
   79  for ( 
int i = 0; i < 9; ++i )
 
   81    res.append( mHalfAxes[i] );
 
 
   90    std::fabs( mHalfAxes[0] ) + std::fabs( mHalfAxes[3] ) + std::fabs( mHalfAxes[6] ),
 
   91    std::fabs( mHalfAxes[1] ) + std::fabs( mHalfAxes[4] ) + std::fabs( mHalfAxes[7] ),
 
   92    std::fabs( mHalfAxes[2] ) + std::fabs( mHalfAxes[5] ) + std::fabs( mHalfAxes[8] ),
 
   95  const double minX = mCenter[0] - 
extent[0];
 
   96  const double maxX = mCenter[0] + 
extent[0];
 
   97  const double minY = mCenter[1] - 
extent[1];
 
   98  const double maxY = mCenter[1] + 
extent[1];
 
   99  const double minZ = mCenter[2] - 
extent[2];
 
  100  const double maxZ = mCenter[2] + 
extent[2];
 
  102  return QgsBox3D( minX, minY, minZ, maxX, maxY, maxZ );
 
 
  108  const QgsVector3D a1( mHalfAxes[0], mHalfAxes[1], mHalfAxes[2] ), a0( -mHalfAxes[0], -mHalfAxes[1], -mHalfAxes[2] );
 
  109  const QgsVector3D b1( mHalfAxes[3], mHalfAxes[4], mHalfAxes[5] ), b0( -mHalfAxes[3], -mHalfAxes[4], -mHalfAxes[5] );
 
  110  const QgsVector3D c1( mHalfAxes[6], mHalfAxes[7], mHalfAxes[8] ), c0( -mHalfAxes[6], -mHalfAxes[7], -mHalfAxes[8] );
 
  112  QVector<QgsVector3D> cor( 8 );
 
  114  for ( 
int i = 0; i < 8; ++i, ++corData )
 
  117    const QgsVector3D bb = ( ( i / 2 ) % 2 == 0 ? b1 : b0 );
 
 
  127  QgsVector3D axis1( mHalfAxes[0], mHalfAxes[1], mHalfAxes[2] );
 
  128  QgsVector3D axis2( mHalfAxes[3], mHalfAxes[4], mHalfAxes[5] );
 
  129  QgsVector3D axis3( mHalfAxes[6], mHalfAxes[7], mHalfAxes[8] );
 
 
  137  Q_ASSERT( 
c.count() == 8 );
 
  138  for ( 
int i = 0; i < 8; ++i )
 
  147    if ( v.x() < v0.
x() ) v0.
setX( v.x() );
 
  148    if ( v.y() < v0.
y() ) v0.
setY( v.y() );
 
  149    if ( v.z() < v0.
z() ) v0.
setZ( v.z() );
 
  150    if ( v.x() > v1.x() ) v1.setX( v.x() );
 
  151    if ( v.y() > v1.y() ) v1.setY( v.y() );
 
  152    if ( v.z() > v1.z() ) v1.setZ( v.z() );
 
  154  return QgsBox3D( v0.
x(), v0.
y(), v0.
z(), v1.x(), v1.y(), v1.z() );
 
 
  159  const double *ptr = transform.
constData();
 
  161                         ptr[1], ptr[5], ptr[9], 0,
 
  162                         ptr[2], ptr[6], ptr[10], 0,
 
  172                           QList<double>() << col1.
x() << col1.
y() << col1.
z()
 
  173                           << col2.
x() << col2.
y() << col2.
z()
 
  174                           << col3.
x() << col3.
y() << col3.
z() );
 
 
  185    { mHalfAxes[0], mHalfAxes[1], mHalfAxes[2] },
 
  186    { mHalfAxes[3], mHalfAxes[4], mHalfAxes[5] },
 
  187    { mHalfAxes[6], mHalfAxes[7], mHalfAxes[8] }
 
  192    { other.mHalfAxes[0], other.mHalfAxes[1], other.mHalfAxes[2] },
 
  193    { other.mHalfAxes[3], other.mHalfAxes[4], other.mHalfAxes[5] },
 
  194    { other.mHalfAxes[6], other.mHalfAxes[7], other.mHalfAxes[8] }
 
  197  for ( 
int a = 0; a < 3; ++a )
 
  200    for ( 
int b = 0; b < 3; ++b )
 
  212      const double penetration = ( ra + rb ) - tl;
 
  213      if ( penetration <= 0 )
 
  218  for ( 
int a = 0; a < 3; ++a )
 
  226    const double penetration = ( ra + rb ) - tl;
 
  227    if ( penetration <= 0 )
 
  231  for ( 
int b = 0; b < 3; ++b )
 
  239    const double penetration = ( ra + rb ) - tl;
 
  240    if ( penetration <= 0 )
 
 
A 3-dimensional box composed of x, y, z coordinates.
 
QgsVector3D center() const
Returns the center of the box as a vector.
 
A simple 4x4 matrix implementation useful for transformation in 3D space.
 
QgsVector3D map(const QgsVector3D &vector) const
Matrix-vector multiplication (vector is converted to homogenous coordinates [X,Y,Z,...
 
const double * constData() const
Returns pointer to the matrix data (stored in column-major order)
 
Represents a oriented (rotated) box in 3 dimensions.
 
const double * halfAxes() const
Returns the half axes matrix;.
 
QgsBox3D extent() const
Returns the overall bounding box of the object.
 
bool isNull() const
Returns true if the box is a null box.
 
QgsOrientedBox3D()
Constructor for a null oriented box.
 
bool intersects(const QgsOrientedBox3D &other) const
Returns true if the box intersects the other box.
 
QVector< QgsVector3D > corners() const
Returns an array of all corners as 3D vectors.
 
static QgsOrientedBox3D fromBox3D(const QgsBox3D &box)
Constructs an oriented box from an axis-aligned bounding box.
 
QList< double > halfAxesList() const
Returns the half axes matrix;.
 
QgsBox3D reprojectedExtent(const QgsCoordinateTransform &ct) const
Reprojects corners of this box using the given coordinate transform and returns axis-aligned box cont...
 
QgsVector3D center() const
Returns the vector to the center of the box.
 
QgsVector3D size() const
Returns size of sides of the box.
 
QgsOrientedBox3D transformed(const QgsMatrix4x4 &transform) const
Returns box transformed by a 4x4 matrix.
 
Class for storage of 3D vectors similar to QVector3D, with the difference that it uses double precisi...
 
double y() const
Returns Y coordinate.
 
double z() const
Returns Z coordinate.
 
void setZ(double z)
Sets Z coordinate.
 
bool isNull() const
Returns true if all three coordinates are zero.
 
static double dotProduct(const QgsVector3D &v1, const QgsVector3D &v2)
Returns the dot product of two vectors.
 
double x() const
Returns X coordinate.
 
void setX(double x)
Sets X coordinate.
 
void normalize()
Normalizes the current vector in place.
 
static QgsVector3D crossProduct(const QgsVector3D &v1, const QgsVector3D &v2)
Returns the cross product of two vectors.
 
void setY(double y)
Sets Y coordinate.
 
double length() const
Returns the length of the 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