20#include <Qt3DCore/QAttribute>
21#include <Qt3DCore/QGeometry>
23#include "moc_qgs3dwiredmesh_p.cpp"
27Qgs3DWiredMesh::Qgs3DWiredMesh( Qt3DCore::QNode *parent )
29 , mPositionAttribute( new
Qt3DCore::QAttribute( this ) )
30 , mVertexBuffer( new
Qt3DCore::QBuffer( this ) )
32 mPositionAttribute->setAttributeType( Qt3DCore::QAttribute::VertexAttribute );
33 mPositionAttribute->setBuffer( mVertexBuffer );
34 mPositionAttribute->setVertexBaseType( Qt3DCore::QAttribute::Float );
35 mPositionAttribute->setVertexSize( 3 );
36 mPositionAttribute->setName( Qt3DCore::QAttribute::defaultPositionAttributeName() );
38 mGeom =
new Qt3DCore::QGeometry(
this );
39 mGeom->addAttribute( mPositionAttribute );
41 setInstanceCount( 1 );
43 setFirstInstance( 0 );
44 setPrimitiveType( Qt3DRender::QGeometryRenderer::Lines );
48Qgs3DWiredMesh::~Qgs3DWiredMesh() =
default;
50void Qgs3DWiredMesh::setVertices(
const QList<QVector3D> &vertices )
52 QByteArray vertexBufferData;
53 vertexBufferData.resize(
static_cast<int>(
static_cast<long>( vertices.size() ) * 3 *
sizeof(
float ) ) );
54 float *rawVertexArray =
reinterpret_cast<float *
>( vertexBufferData.data() );
56 for (
const QVector3D &v : std::as_const( vertices ) )
58 rawVertexArray[idx++] = v.x();
59 rawVertexArray[idx++] = v.y();
60 rawVertexArray[idx++] = v.z();
63 mVertexBuffer->setData( vertexBufferData );
64 setVertexCount( vertices.count() );
67void Qgs3DWiredMesh::setVertices(
const QList<QgsAABB> &bboxes )
69 QList<QVector3D> vertices;
70 for (
const QgsAABB &bbox : bboxes )
71 vertices << bbox.verticesForLines();
73 setVertices( vertices );
Axis-aligned bounding box - in world coords.