QgsLine3DSymbol QgsLine3DSymbolWidget::symbol() const
{
  QgsLine3DSymbol sym;
  sym.setWidth( spinWidth->value() );
  sym.setHeight( spinHeight->value() );
  sym.setExtrusionHeight( spinExtrusion->value() );
  sym.setAltitudeClamping( static_cast<Qgs3DTypes::AltitudeClamping>( cboAltClamping->currentIndex() ) );
  sym.setAltitudeBinding( static_cast<Qgs3DTypes::AltitudeBinding>( cboAltBinding->currentIndex() ) );
  sym.setRenderAsSimpleLines( chkSimpleLines->isChecked() );
  sym.setMaterial( widgetMaterial->material() );
  return sym;
}
void QgsLine3DSymbolWidget::setSymbol( const QgsLine3DSymbol &symbol )
{
  spinWidth->setValue( symbol.width() );
  spinHeight->setValue( symbol.height() );
  spinExtrusion->setValue( symbol.extrusionHeight() );
  cboAltClamping->setCurrentIndex( static_cast<int>( symbol.altitudeClamping() ) );
  cboAltBinding->setCurrentIndex( static_cast<int>( symbol.altitudeBinding() ) );
  chkSimpleLines->setChecked( symbol.renderAsSimpleLines() );
  widgetMaterial->setMaterial( symbol.material() );
  updateGuiState();
}
QgsLine3DSymbolEntityNode::QgsLine3DSymbolEntityNode( const Qgs3DMapSettings &map, QgsVectorLayer *layer, const QgsLine3DSymbol &symbol, const QgsFeatureRequest &req, Qt3DCore::QNode *parent )
  : Qt3DCore::QEntity( parent )
{
  addComponent( symbol.renderAsSimpleLines() ? rendererSimple( map, symbol, layer, req ) : renderer( map, symbol, layer, req ) );
}