26 #include <Qt3DCore/QEntity> 
   27 #include <Qt3DRender/QAttribute> 
   28 #include <Qt3DRender/QBuffer> 
   29 #include <Qt3DRender/QGeometry> 
   30 #include <Qt3DRender/QGeometryRenderer> 
   31 #include <Qt3DRender/QMaterial> 
   41   mEntity = 
new Qt3DCore::QEntity( parentEntity );
 
   43   QgsLineVertexData dummyLineData;
 
   44   mGeometry = dummyLineData.createGeometry( mEntity );
 
   46   Q_ASSERT( mGeometry->attributes().count() == 2 );
 
   47   mPositionAttribute = mGeometry->attributes()[0];
 
   48   mIndexAttribute = mGeometry->attributes()[1];
 
   50   mGeomRenderer = 
new Qt3DRender::QGeometryRenderer;
 
   51   mGeomRenderer->setPrimitiveType( Qt3DRender::QGeometryRenderer::LineStripAdjacency );
 
   52   mGeomRenderer->setGeometry( mGeometry );
 
   53   mGeomRenderer->setPrimitiveRestartEnabled( 
true );
 
   54   mGeomRenderer->setRestartIndexValue( 0 );
 
   56   mEntity->addComponent( mGeomRenderer );
 
   58   mLineMaterial = 
new QgsLineMaterial;
 
   59   mLineMaterial->setLineWidth( 3 );
 
   60   mLineMaterial->setLineColor( Qt::red );
 
   64     mLineMaterial->setViewportSize( cameraController->
viewport().size() );
 
   66   mLineMaterial->setViewportSize( cameraController->
viewport().size() );
 
   68   mEntity->addComponent( mLineMaterial );
 
   71 QgsRubberBand3D::~QgsRubberBand3D()
 
   76 float QgsRubberBand3D::width()
 const 
   78   return mLineMaterial->lineWidth();
 
   81 void QgsRubberBand3D::setWidth( 
float width )
 
   83   mLineMaterial->setLineWidth( width );
 
   86 QColor QgsRubberBand3D::color()
 const 
   88   return mLineMaterial->lineColor();
 
   91 void QgsRubberBand3D::setColor( QColor color )
 
   93   mLineMaterial->setLineColor( color );
 
   96 void QgsRubberBand3D::reset()
 
  102 void QgsRubberBand3D::addPoint( 
const QgsPoint &pt )
 
  104   mLineString.addVertex( pt );
 
  108 void QgsRubberBand3D::removeLastPoint()
 
  110   const int lastVertexIndex = mLineString.numPoints() - 1;
 
  111   mLineString.deleteVertex( 
QgsVertexId( 0, 0, lastVertexIndex ) );
 
  115 void QgsRubberBand3D::updateGeometry()
 
  117   QgsLineVertexData lineData;
 
  118   lineData.withAdjacency = 
true;
 
  120   lineData.addLineString( mLineString );
 
  122   mPositionAttribute->buffer()->setData( lineData.createVertexBuffer() );
 
  123   mIndexAttribute->buffer()->setData( lineData.createIndexBuffer() );
 
  124   mGeomRenderer->setVertexCount( lineData.indexes.count() );