26
26
27
27
using namespace Qt3DRender ;
28
28
29
- static QByteArray createPlaneVertexData ( const QgsTriangularMesh &mesh, const QgsRectangle &extent, float vertScale )
29
+ static QByteArray createPlaneVertexData ( const QgsTriangularMesh &mesh,
30
+ const QgsVector3D &origin,
31
+ const QgsRectangle &extent,
32
+ float vertScale )
30
33
{
31
34
const int nVerts = mesh.vertices ().count ();
32
35
@@ -49,9 +52,9 @@ static QByteArray createPlaneVertexData( const QgsTriangularMesh &mesh, const Qg
49
52
for ( int i = 0 ; i < nVerts; i++ )
50
53
{
51
54
const QgsMeshVertex &vert = mesh.vertices ().at ( i );
52
- *fptr++ = float ( vert.x () );
53
- *fptr++ = float ( vert.z () ) * vertScale ;
54
- *fptr++ = float ( -vert.y () );
55
+ *fptr++ = float ( vert.x () - origin. x () );
56
+ *fptr++ = float ( vert.z () - origin. z () ) * vertScale ;
57
+ *fptr++ = float ( -vert.y () + origin. y () );
55
58
56
59
*fptr++ = float ( ( vert.x () - x0 ) / w );
57
60
*fptr++ = float ( ( y0 - vert.y () ) / h );
@@ -144,16 +147,20 @@ static QByteArray createPlaneIndexData( const QgsTriangularMesh &mesh )
144
147
class MeshPlaneVertexBufferFunctor : public QBufferDataGenerator
145
148
{
146
149
public:
147
- explicit MeshPlaneVertexBufferFunctor ( const QgsTriangularMesh &mesh, const QgsRectangle &extent, float vertScale )
150
+ explicit MeshPlaneVertexBufferFunctor ( const QgsTriangularMesh &mesh,
151
+ const QgsVector3D &origin,
152
+ const QgsRectangle &extent,
153
+ float vertScale )
148
154
: mMesh( mesh ),
155
+ mOrigin( origin ),
149
156
mExtent( extent ),
150
157
mVertScale( vertScale )
151
158
152
159
{}
153
160
154
161
QByteArray operator ()() final
155
162
{
156
- return createPlaneVertexData ( mMesh , mExtent , mVertScale );
163
+ return createPlaneVertexData ( mMesh , mOrigin , mExtent , mVertScale );
157
164
}
158
165
159
166
bool operator ==( const QBufferDataGenerator &other ) const final
@@ -171,6 +178,7 @@ class MeshPlaneVertexBufferFunctor : public QBufferDataGenerator
171
178
private:
172
179
173
180
QgsTriangularMesh mMesh ;
181
+ QgsVector3D mOrigin ;
174
182
QgsRectangle mExtent ;
175
183
float mVertScale ;
176
184
@@ -253,11 +261,13 @@ class MeshPlaneVertexDatasetBufferFunctor : public QBufferDataGenerator
253
261
254
262
QgsMesh3dGeometry::QgsMesh3dGeometry (
255
263
const QgsTriangularMesh &mesh,
264
+ const QgsVector3D &origin,
256
265
const QgsRectangle &extent,
257
266
float verticaleScale,
258
267
QgsMesh3dGeometry::QNode *parent ):
259
268
QGeometry( parent ),
260
269
mTriangularMesh( mesh ),
270
+ mOrigin( origin ),
261
271
mExtent( extent ),
262
272
mVertScale( verticaleScale )
263
273
{
@@ -313,7 +323,7 @@ void QgsMesh3dGeometry::init()
313
323
// Each primitive has 3 vertives
314
324
mIndexAttribute ->setCount ( uint ( mTriangularMesh .triangles ().count () ) * 3 );
315
325
316
- mVertexBuffer ->setData ( MeshPlaneVertexBufferFunctor ( mTriangularMesh , mExtent , mVertScale )() );
326
+ mVertexBuffer ->setData ( MeshPlaneVertexBufferFunctor ( mTriangularMesh , mOrigin , mExtent , mVertScale )() );
317
327
mIndexBuffer ->setData ( MeshPlaneIndexBufferFunctor ( mTriangularMesh )() );
318
328
319
329
addAttribute ( mPositionAttribute );
0 commit comments