void QgsVectorLayer3DRendererWidget::setRenderer( const QgsVectorLayer3DRenderer *renderer ) { mRenderer.reset( renderer ? renderer->clone() : nullptr ); whileBlocking( chkEnabled )->setChecked( ( bool )mRenderer ); widgetLine->setEnabled( chkEnabled->isChecked() ); widgetPoint->setEnabled( chkEnabled->isChecked() ); widgetPolygon->setEnabled( chkEnabled->isChecked() ); int pageIndex; QgsVectorLayer *vlayer = qobject_cast<QgsVectorLayer *>( mLayer ); switch ( vlayer->geometryType() ) { case QgsWkbTypes::PointGeometry: pageIndex = 2; if ( mRenderer && mRenderer->symbol() && mRenderer->symbol()->type() == "point" ) { whileBlocking( widgetPoint )->setSymbol( *static_cast<const QgsPoint3DSymbol *>( mRenderer->symbol() ) ); } else { whileBlocking( widgetPoint )->setSymbol( QgsPoint3DSymbol() ); } break; case QgsWkbTypes::LineGeometry: pageIndex = 1; if ( mRenderer && mRenderer->symbol() && mRenderer->symbol()->type() == "line" ) { whileBlocking( widgetLine )->setSymbol( *static_cast<const QgsLine3DSymbol *>( mRenderer->symbol() ) ); } else { whileBlocking( widgetLine )->setSymbol( QgsLine3DSymbol() ); } break; case QgsWkbTypes::PolygonGeometry: pageIndex = 3; if ( mRenderer && mRenderer->symbol() && mRenderer->symbol()->type() == "polygon" ) { whileBlocking( widgetPolygon )->setSymbol( *static_cast<const QgsPolygon3DSymbol *>( mRenderer->symbol() ) ); } else { whileBlocking( widgetPolygon )->setSymbol( QgsPolygon3DSymbol() ); } break; default: pageIndex = 0; // unsupported break; } widgetStack->setCurrentIndex( pageIndex ); }
void QgsSymbol3DWidget::setSymbol( const QgsAbstract3DSymbol *symbol, QgsVectorLayer *vlayer ) { int pageIndex; switch ( vlayer->geometryType() ) { case QgsWkbTypes::PointGeometry: pageIndex = 2; if ( symbol && symbol->type() == QLatin1String( "point" ) ) { whileBlocking( widgetPoint )->setSymbol( *static_cast<const QgsPoint3DSymbol *>( symbol ) ); } else { whileBlocking( widgetPoint )->setSymbol( QgsPoint3DSymbol() ); } break; case QgsWkbTypes::LineGeometry: pageIndex = 1; if ( symbol && symbol->type() == QLatin1String( "line" ) ) { whileBlocking( widgetLine )->setSymbol( *static_cast<const QgsLine3DSymbol *>( symbol ) ); } else { whileBlocking( widgetLine )->setSymbol( QgsLine3DSymbol() ); } break; case QgsWkbTypes::PolygonGeometry: pageIndex = 3; if ( symbol && symbol->type() == QLatin1String( "polygon" ) ) { whileBlocking( widgetPolygon )->setSymbol( *static_cast<const QgsPolygon3DSymbol *>( symbol ), vlayer ); } else { whileBlocking( widgetPolygon )->setSymbol( QgsPolygon3DSymbol(), vlayer ); } break; default: pageIndex = 0; // unsupported break; } widgetStack->setCurrentIndex( pageIndex ); }
QgsPolygon3DSymbolWidget::QgsPolygon3DSymbolWidget( QWidget *parent ) : QWidget( parent ) { setupUi( this ); spinHeight->setClearValue( 0.0 ); spinExtrusion->setClearValue( 0.0 ); setSymbol( QgsPolygon3DSymbol(), nullptr ); connect( spinHeight, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsPolygon3DSymbolWidget::changed ); connect( spinExtrusion, static_cast<void ( QDoubleSpinBox::* )( double )>( &QDoubleSpinBox::valueChanged ), this, &QgsPolygon3DSymbolWidget::changed ); connect( cboAltClamping, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsPolygon3DSymbolWidget::changed ); connect( cboAltBinding, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsPolygon3DSymbolWidget::changed ); connect( cboCullingMode, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsPolygon3DSymbolWidget::changed ); connect( chkAddBackFaces, &QCheckBox::clicked, this, &QgsPolygon3DSymbolWidget::changed ); connect( chkInvertNormals, &QCheckBox::clicked, this, &QgsPolygon3DSymbolWidget::changed ); connect( widgetMaterial, &QgsPhongMaterialWidget::changed, this, &QgsPolygon3DSymbolWidget::changed ); connect( btnHeightDD, &QgsPropertyOverrideButton::changed, this, &QgsPolygon3DSymbolWidget::changed ); connect( btnExtrusionDD, &QgsPropertyOverrideButton::changed, this, &QgsPolygon3DSymbolWidget::changed ); }