17 #include <QSvgRenderer> 
   21 #include <QDesktopWidget> 
   32 static void _setSvg( QLabel *imageLabel,
 
   33                      const QString &imgName )
 
   35   const qreal dpi = QgsApplication::desktop()->logicalDpiX();
 
   36   const int desiredWidth = 
static_cast<int>( 100 * dpi / 25.4 );
 
   38   QSvgRenderer renderer( QStringLiteral( 
":/images/themes/default/mesh/%1" ).arg( imgName ) );
 
   39   if ( renderer.isValid() )
 
   41     const QSize defaultSvgSize = renderer.defaultSize();
 
   42     const int desiredHeight = defaultSvgSize.height() * desiredWidth / defaultSvgSize.width();
 
   44     QPixmap pixmap( QSize( desiredWidth, desiredHeight ) );
 
   45     pixmap.fill( Qt::transparent );
 
   48     painter.begin( &pixmap );
 
   49     renderer.render( &painter );
 
   51     imageLabel->setPixmap( pixmap );
 
   60   connect( mAveragingMethodComboBox, qOverload<int>( &QComboBox::currentIndexChanged ),
 
   61            this, &QgsMeshRenderer3dAveragingWidget::onAveragingMethodChanged );
 
   64   connect( mSingleVerticalLayerIndexTopSpinBox, qOverload<int>( &QgsSpinBox::valueChanged ),
 
   66   _setSvg( mSingleTopPngLabel,
 
   67            QStringLiteral( 
"SingleTop.svg" )
 
   69   mSingleTopGroup->adjustSize();
 
   72   connect( mSingleVerticalLayerIndexBottomSpinBox, qOverload<int>( &QgsSpinBox::valueChanged ),
 
   74   _setSvg( mSingleBottomPngLabel,
 
   75            QStringLiteral( 
"SingleBottom.svg" )
 
   79   connect( mMultiTopVerticalLayerStartIndexSpinBox, qOverload<int>( &QgsSpinBox::valueChanged ),
 
   81   connect( mMultiTopVerticalLayerEndIndexSpinBox, qOverload<int>( &QgsSpinBox::valueChanged ),
 
   83   _setSvg( mMultiTopPngLabel,
 
   84            QStringLiteral( 
"MultiTop.svg" )
 
   88   connect( mMultiBottomVerticalLayerStartIndexSpinBox, qOverload<int>( &QgsSpinBox::valueChanged ),
 
   90   connect( mMultiBottomVerticalLayerEndIndexSpinBox, qOverload<int>( &QgsSpinBox::valueChanged ),
 
   92   _setSvg( mMultiBottomPngLabel,
 
   93            QStringLiteral( 
"MultiBottom.svg" )
 
   97   connect( mSigmaStartFractionSpinBox, qOverload<double>( &QgsDoubleSpinBox::valueChanged ),
 
   99   connect( mSigmaEndFractionSpinBox, qOverload<double>( &QgsDoubleSpinBox::valueChanged ),
 
  101   _setSvg( mSigmaPngLabel,
 
  102            QStringLiteral( 
"Sigma.svg" )
 
  106   connect( mDepthStartSpinBox, qOverload<double>( &QgsDoubleSpinBox::valueChanged ),
 
  108   connect( mDepthEndSpinBox, qOverload<double>( &QgsDoubleSpinBox::valueChanged ),
 
  110   _setSvg( mDepthPngLabel,
 
  111            QStringLiteral( 
"Depth.svg" )
 
  115   connect( mHeightStartSpinBox, qOverload<double>( &QgsDoubleSpinBox::valueChanged ),
 
  117   connect( mHeightEndSpinBox, qOverload<double>( &QgsDoubleSpinBox::valueChanged ),
 
  119   _setSvg( mHeightPngLabel,
 
  120            QStringLiteral( 
"Height.svg" )
 
  124   connect( mElevationStartSpinBox, qOverload<double>( &QgsDoubleSpinBox::valueChanged ),
 
  126   connect( mElevationEndSpinBox, qOverload<double>( &QgsDoubleSpinBox::valueChanged ),
 
  128   _setSvg( mElevationPngLabel,
 
  129            QStringLiteral( 
"Elevation.svg" )
 
  140   std::unique_ptr<QgsMesh3dAveragingMethod> averaging;
 
  142   switch ( mAveragingMethodComboBox->currentIndex() )
 
  146       const int verticalLevel = mSingleVerticalLayerIndexTopSpinBox->value();
 
  152       const int verticalLevel = mSingleVerticalLayerIndexBottomSpinBox->value();
 
  158       const int startVerticalLevel = mMultiTopVerticalLayerStartIndexSpinBox->value();
 
  159       const int endVerticalLevel = mMultiTopVerticalLayerEndIndexSpinBox->value();
 
  165       const int startVerticalLevel = mMultiBottomVerticalLayerStartIndexSpinBox->value();
 
  166       const int endVerticalLevel = mMultiBottomVerticalLayerEndIndexSpinBox->value();
 
  172       const double startFraction = mSigmaStartFractionSpinBox->value();
 
  173       const double endFraction = mSigmaEndFractionSpinBox->value();
 
  179       const double startDepth = mDepthStartSpinBox->value();
 
  180       const double endDepth = mDepthEndSpinBox->value();
 
  186       const double startHeight = mHeightStartSpinBox->value();
 
  187       const double endHeight = mHeightEndSpinBox->value();
 
  193       const double startVerticalLevel = mElevationStartSpinBox->value();
 
  194       const double endVerticalLevel = mElevationEndSpinBox->value();
 
  287     whileBlocking( mAveragingMethodComboBox )->setCurrentIndex( pageIndex );
 
  288     whileBlocking( mAveragingMethodStackedWidget )->setCurrentIndex( pageIndex );
 
  292 void QgsMeshRenderer3dAveragingWidget::onAveragingMethodChanged( 
int methodIndex )
 
  294   whileBlocking( mAveragingMethodStackedWidget )->setCurrentIndex( methodIndex );