QGIS API Documentation  3.21.0-Master (5b68dc587e)
qgsraycastingutils_p.h
Go to the documentation of this file.
1 /***************************************************************************
2  qgsraycastingutils_p.h
3  --------------------------------------
4  Date : June 2018
5  Copyright : (C) 2018 by Martin Dobias
6  Email : wonder dot sk at gmail dot com
7  ***************************************************************************
8  * *
9  * This program is free software; you can redistribute it and/or modify *
10  * it under the terms of the GNU General Public License as published by *
11  * the Free Software Foundation; either version 2 of the License, or *
12  * (at your option) any later version. *
13  * *
14  ***************************************************************************/
15 
16 #ifndef QGSRAYCASTINGUTILS_P_H
17 #define QGSRAYCASTINGUTILS_P_H
18 
20 
21 //
22 // W A R N I N G
23 // -------------
24 //
25 // This file is not part of the QGIS API. It exists purely as an
26 // implementation detail. This header file may change from version to
27 // version without notice, or even be removed.
28 //
29 
30 #include <QVector3D>
31 
32 #define SIP_NO_FILE
33 
34 class QgsAABB;
35 
36 namespace Qt3DRender
37 {
38  class QCamera;
39 }
40 
41 
42 namespace QgsRayCastingUtils
43 {
44 
50  class Ray3D
51  {
52  public:
53  Ray3D();
54  explicit Ray3D( QVector3D origin, QVector3D direction = QVector3D( 0.0f, 0.0f, 1.0f ), float distance = 1.0f );
55 
56  QVector3D origin() const;
57  void setOrigin( QVector3D value );
58 
59  QVector3D direction() const;
60  void setDirection( QVector3D value );
61 
62  float distance() const;
63  void setDistance( float distance );
64 
65  bool contains( QVector3D point ) const;
66  bool contains( const Ray3D &ray ) const;
67 
68  QVector3D point( float t ) const;
69  float projectedDistance( QVector3D point ) const;
70 
71  QVector3D project( QVector3D vector ) const;
72 
73  float distance( QVector3D point ) const;
74 
75  Ray3D &transform( const QMatrix4x4 &matrix );
76  Ray3D transformed( const QMatrix4x4 &matrix ) const;
77 
78  // TODO c++20 - replace with = default
79  bool operator==( const Ray3D &other ) const;
80  bool operator!=( const Ray3D &other ) const;
81 
82  private:
83  QVector3D m_origin;
84  QVector3D m_direction;
85  float m_distance = 1.0f;
86  };
87 
94  bool rayBoxIntersection( const Ray3D &r, const QgsAABB &aabb );
95 
97  struct Plane3D
98  {
99  QVector3D center;
100  QVector3D normal;
101  };
102 
108  bool rayPlaneIntersection( const Ray3D &r, const Plane3D &plane, QVector3D &pt );
109 
115  bool rayTriangleIntersection( const Ray3D &ray,
116  QVector3D a,
117  QVector3D b,
118  QVector3D c,
119  QVector3D &uvw,
120  float &t );
121 
127  Ray3D rayForViewportAndCamera( const QSize &area,
128  const QPointF &pos,
129  const QRectF &relativeViewport,
130  const Qt3DRender::QCamera *camera );
131 
137  Ray3D rayForCameraCenter( const Qt3DRender::QCamera *camera );
138 }
139 
141 
142 #endif // QGSRAYCASTINGUTILS_P_H
3
Definition: qgsaabb.h:34
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 operator==(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)
bool operator!=(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)