QGIS API Documentation 4.1.0-Master (01362494303)
Loading...
Searching...
No Matches
qgsrenderermeshpropertieswidget.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsrenderermeshpropertieswidget.cpp
3 -----------------------------------
4 begin : June 2018
5 copyright : (C) 2018 by Peter Petrik
6 email : zilolv at gmail dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
17
18#include "qgis.h"
19#include "qgsmapcanvas.h"
20#include "qgsmeshlayer.h"
23#include "qgsproject.h"
24#include "qgsprojectutils.h"
26#include "qgssettingstree.h"
27
28#include <QString>
29
30#include "moc_qgsrenderermeshpropertieswidget.cpp"
31
32using namespace Qt::StringLiterals;
33
35
37 : QgsMapLayerConfigWidget( layer, canvas, parent )
38 , mMeshLayer( layer )
39{
40 if ( !mMeshLayer )
41 return;
42
43 setupUi( this );
44
45 connect( mMeshLayer, &QgsMeshLayer::dataChanged, this, &QgsRendererMeshPropertiesWidget::syncToLayerPrivate );
46
47 mMeshRendererActiveDatasetWidget->setLayer( mMeshLayer );
48 mMeshRendererScalarSettingsWidget->setLayer( mMeshLayer );
49 mMeshRendererScalarSettingsWidget->setCanvas( mMapCanvas );
50 mNativeMeshSettingsWidget->setLayer( mMeshLayer, QgsMeshRendererMeshSettingsWidget::MeshType::Native );
51 mTriangularMeshSettingsWidget->setLayer( mMeshLayer, QgsMeshRendererMeshSettingsWidget::MeshType::Triangular );
52 mEdgeMeshSettingsWidget->setLayer( mMeshLayer, QgsMeshRendererMeshSettingsWidget::MeshType::Edge );
53 mMeshRendererVectorSettingsWidget->setLayer( mMeshLayer );
54 m3dAveragingSettingsWidget->setLayer( mMeshLayer );
55 syncToLayer( mMeshLayer );
56
57 //blend mode
58 mBlendModeComboBox->setShowClippingModes( QgsProjectUtils::layerIsContainedInGroupLayer( QgsProject::instance(), mMeshLayer ) );
59 mBlendModeComboBox->setBlendMode( mMeshLayer->blendMode() );
60 connect( mBlendModeComboBox, static_cast<void ( QComboBox::* )( int )>( &QComboBox::currentIndexChanged ), this, &QgsPanelWidget::widgetChanged );
61
62 mOpacityWidget->setOpacity( mMeshLayer->opacity() );
63 connect( mOpacityWidget, &QgsOpacityWidget::opacityChanged, this, &QgsPanelWidget::widgetChanged );
64
65 connect( mMeshRendererActiveDatasetWidget, &QgsMeshRendererActiveDatasetWidget::activeScalarGroupChanged, this, &QgsRendererMeshPropertiesWidget::onActiveScalarGroupChanged );
66 connect( mMeshRendererActiveDatasetWidget, &QgsMeshRendererActiveDatasetWidget::activeVectorGroupChanged, this, &QgsRendererMeshPropertiesWidget::onActiveVectorGroupChanged );
67
68 connect( mNativeMeshGroup, &QGroupBox::toggled, this, &QgsPanelWidget::widgetChanged );
69 connect( mEdgeMeshGroup, &QGroupBox::toggled, this, &QgsPanelWidget::widgetChanged );
70 connect( mTriangularMeshGroup, &QGroupBox::toggled, this, &QgsPanelWidget::widgetChanged );
71 connect( mContoursGroupBox, &QGroupBox::toggled, this, &QgsPanelWidget::widgetChanged );
72 connect( mVectorsGroupBox, &QGroupBox::toggled, this, &QgsPanelWidget::widgetChanged );
73 connect( mMeshRendererActiveDatasetWidget, &QgsMeshRendererActiveDatasetWidget::widgetChanged, this, &QgsPanelWidget::widgetChanged );
74 connect( mMeshRendererScalarSettingsWidget, &QgsMeshRendererScalarSettingsWidget::widgetChanged, this, &QgsPanelWidget::widgetChanged );
75 connect( mMeshRendererVectorSettingsWidget, &QgsMeshRendererVectorSettingsWidget::widgetChanged, this, &QgsPanelWidget::widgetChanged );
76 connect( mNativeMeshSettingsWidget, &QgsMeshRendererMeshSettingsWidget::widgetChanged, this, &QgsPanelWidget::widgetChanged );
77 connect( mTriangularMeshSettingsWidget, &QgsMeshRendererMeshSettingsWidget::widgetChanged, this, &QgsPanelWidget::widgetChanged );
79 connect( m3dAveragingSettingsWidget, &QgsMeshRenderer3DAveragingWidget::widgetChanged, this, &QgsPanelWidget::widgetChanged );
80}
81
83{
84 if ( !mMeshLayer )
85 return;
86
87 // 1D EDGE MESH
88 const bool edgeMeshRenderingIsEnabled = mEdgeMeshGroup->isChecked();
89 QgsMeshRendererMeshSettings edgeMeshSettings = mEdgeMeshSettingsWidget->settings();
90 edgeMeshSettings.setEnabled( edgeMeshRenderingIsEnabled );
91
92 // 2D NATIVE MESH
93 const bool nativeMeshRenderingIsEnabled = mNativeMeshGroup->isChecked();
94 QgsMeshRendererMeshSettings nativeMeshSettings = mNativeMeshSettingsWidget->settings();
95 nativeMeshSettings.setEnabled( nativeMeshRenderingIsEnabled );
96
97 // 2D TRIANGULAR MESH
98 const bool triangularMeshRenderingIsEnabled = mTriangularMeshGroup->isChecked();
99 QgsMeshRendererMeshSettings triangularMeshSettings = mTriangularMeshSettingsWidget->settings();
100 triangularMeshSettings.setEnabled( triangularMeshRenderingIsEnabled );
101
102 // SCALAR
103 int activeScalarDatasetGroupIndex = mMeshRendererActiveDatasetWidget->activeScalarDatasetGroup();
104 if ( !mContoursGroupBox->isChecked() )
105 activeScalarDatasetGroupIndex = -1;
106
107 // VECTOR
108 int activeVectorDatasetGroupIndex = mMeshRendererActiveDatasetWidget->activeVectorDatasetGroup();
109 if ( !mVectorsGroupBox->isChecked() )
110 activeVectorDatasetGroupIndex = -1;
111
112 QgsMeshRendererSettings settings = mMeshLayer->rendererSettings();
113 settings.setEdgeMeshSettings( edgeMeshSettings );
114 settings.setNativeMeshSettings( nativeMeshSettings );
115 settings.setTriangularMeshSettings( triangularMeshSettings );
116
117 settings.setActiveScalarDatasetGroup( activeScalarDatasetGroupIndex );
118 if ( activeScalarDatasetGroupIndex > -1 )
119 settings.setScalarSettings( activeScalarDatasetGroupIndex, mMeshRendererScalarSettingsWidget->settings() );
120
121 settings.setActiveVectorDatasetGroup( activeVectorDatasetGroupIndex );
122 if ( activeVectorDatasetGroupIndex > -1 )
123 settings.setVectorSettings( activeVectorDatasetGroupIndex, mMeshRendererVectorSettingsWidget->settings() );
124
125 const QgsMeshDatasetIndex staticScalarDatasetIndex( activeScalarDatasetGroupIndex, mMeshLayer->staticScalarDatasetIndex().dataset() );
126 const QgsMeshDatasetIndex staticVectorDatasetIndex( activeVectorDatasetGroupIndex, mMeshLayer->staticVectorDatasetIndex().dataset() );
127 mMeshLayer->setStaticScalarDatasetIndex( staticScalarDatasetIndex );
128 mMeshLayer->setStaticVectorDatasetIndex( staticVectorDatasetIndex );
129
130 //set the blend mode and opacity for the layer
131 mMeshLayer->setBlendMode( mBlendModeComboBox->blendMode() );
132 mLayer->setOpacity( mOpacityWidget->opacity() );
133 //set the averaging method for the layer
134 const std::unique_ptr<QgsMesh3DAveragingMethod> averagingMethod( m3dAveragingSettingsWidget->averagingMethod() );
135 settings.setAveragingMethod( averagingMethod.get() );
136 mMeshLayer->setRendererSettings( settings );
137 mMeshLayer->triggerRepaint();
138
139 settingsTab->setValue( mStyleOptionsTab->currentIndex() );
140}
141
143{
144 QgsMeshLayer *ml = qobject_cast<QgsMeshLayer *>( mapLayer );
145 if ( ml )
146 {
147 mLayer = ml;
148 mMeshRendererActiveDatasetWidget->setLayer( ml );
149 mNativeMeshSettingsWidget->setLayer( ml, QgsMeshRendererMeshSettingsWidget::Native );
150 mTriangularMeshSettingsWidget->setLayer( ml, QgsMeshRendererMeshSettingsWidget::Triangular );
151 mEdgeMeshSettingsWidget->setLayer( ml, QgsMeshRendererMeshSettingsWidget::Edge );
152 m3dAveragingSettingsWidget->setLayer( ml );
153 }
154 else
155 return;
156
157 syncToLayerPrivate();
158}
159
160void QgsRendererMeshPropertiesWidget::syncToLayerPrivate()
161{
162 if ( !mMeshLayer )
163 return;
164
165 mMeshRendererActiveDatasetWidget->syncToLayer();
166 mNativeMeshSettingsWidget->syncToLayer();
167 mTriangularMeshSettingsWidget->syncToLayer();
168 mEdgeMeshSettingsWidget->syncToLayer();
169 m3dAveragingSettingsWidget->syncToLayer();
170
171 mNativeMeshGroup->setChecked( mMeshLayer->rendererSettings().nativeMeshSettings().isEnabled() );
172 mTriangularMeshGroup->setChecked( mMeshLayer->rendererSettings().triangularMeshSettings().isEnabled() );
173 mEdgeMeshGroup->setChecked( mMeshLayer->rendererSettings().edgeMeshSettings().isEnabled() );
174
175 onActiveScalarGroupChanged( mMeshLayer->rendererSettings().activeScalarDatasetGroup() );
176 onActiveVectorGroupChanged( mMeshLayer->rendererSettings().activeVectorDatasetGroup() );
177
178 const bool hasFaces = ( mMeshLayer->contains( QgsMesh::ElementType::Face ) );
179 mFaceMeshGroupBox->setVisible( hasFaces || !mMeshLayer->isValid() );
180
181 const bool hasEdges = ( mMeshLayer->contains( QgsMesh::ElementType::Edge ) );
182 mEdgeMeshGroupBox->setVisible( hasEdges || !mMeshLayer->isValid() );
183
184 mStyleOptionsTab->setCurrentIndex( settingsTab->value() );
185}
186
187void QgsRendererMeshPropertiesWidget::onActiveScalarGroupChanged( int groupIndex )
188{
189 mMeshRendererScalarSettingsWidget->setActiveDatasetGroup( groupIndex );
190 mMeshRendererScalarSettingsWidget->syncToLayer();
191 mContoursGroupBox->setChecked( groupIndex >= 0 );
192 mContoursGroupBox->setEnabled( groupIndex >= 0 );
193}
194
195void QgsRendererMeshPropertiesWidget::onActiveVectorGroupChanged( int groupIndex )
196{
197 if ( groupIndex >= 0 && !mMeshLayer->datasetGroupMetadata( groupIndex ).isVector() )
198 groupIndex = -1;
199 mMeshRendererVectorSettingsWidget->setActiveDatasetGroup( groupIndex );
200 mMeshRendererVectorSettingsWidget->syncToLayer();
201 mVectorsGroupBox->setChecked( groupIndex >= 0 );
202 mVectorsGroupBox->setEnabled( groupIndex >= 0 );
203}
Map canvas is a class for displaying all GIS data types on a canvas.
QgsMapLayerConfigWidget(QgsMapLayer *layer, QgsMapCanvas *canvas, QWidget *parent=nullptr)
A panel widget that can be shown in the map style dock.
Base class for all map layer types.
Definition qgsmaplayer.h:83
void dataChanged()
Data of layer changed.
An index that identifies the dataset group (e.g.
Represents a mesh layer supporting display of data on structured or unstructured meshes.
bool contains(const QgsMesh::ElementType &type) const
Returns whether the mesh contains at mesh elements of given type.
QgsMeshRendererSettings rendererSettings() const
Returns renderer settings.
void widgetChanged()
Mesh rendering settings changed.
void widgetChanged()
Emitted when any settings related to rendering changed.
void activeScalarGroupChanged(int groupIndex)
Emitted when the current scalar group gets changed.
void activeVectorGroupChanged(int groupIndex)
Emitted when the current vector group gets changed.
void widgetChanged()
Mesh rendering settings changed.
Represents a mesh renderer settings for mesh objects.
void setEnabled(bool enabled)
Sets whether mesh structure rendering is enabled.
bool isEnabled() const
Returns whether mesh structure rendering is enabled.
void widgetChanged()
Mesh rendering settings changed.
Represents all mesh renderer settings.
void setAveragingMethod(QgsMesh3DAveragingMethod *method)
Sets averaging method for conversion of 3d stacked mesh data to 2d data.
void setActiveVectorDatasetGroup(int activeVectorDatasetGroup)
Sets the active vector dataset group.
int activeVectorDatasetGroup() const
Returns the active vector dataset group.
void setEdgeMeshSettings(const QgsMeshRendererMeshSettings &settings)
Sets new edge mesh renderer settings.
int activeScalarDatasetGroup() const
Returns the active scalar dataset group.
void setActiveScalarDatasetGroup(int activeScalarDatasetGroup)
Sets the active scalar dataset group.
void setVectorSettings(int groupIndex, const QgsMeshRendererVectorSettings &settings)
Sets new renderer settings.
void setTriangularMeshSettings(const QgsMeshRendererMeshSettings &settings)
Sets new triangular mesh renderer settings.
QgsMeshRendererMeshSettings edgeMeshSettings() const
Returns edge mesh renderer settings.
QgsMeshRendererMeshSettings nativeMeshSettings() const
Returns native mesh renderer settings.
void setScalarSettings(int groupIndex, const QgsMeshRendererScalarSettings &settings)
Sets new renderer settings.
QgsMeshRendererMeshSettings triangularMeshSettings() const
Returns triangular mesh renderer settings.
void setNativeMeshSettings(const QgsMeshRendererMeshSettings &settings)
Sets new native mesh renderer settings, triggers repaint.
void widgetChanged()
Mesh rendering settings changed.
void opacityChanged(double opacity)
Emitted when the opacity is changed in the widget, where opacity ranges from 0.0 (transparent) to 1....
void widgetChanged()
Emitted when the widget state changes.
static bool layerIsContainedInGroupLayer(QgsProject *project, QgsMapLayer *layer)
Returns true if the specified layer is a child layer from any QgsGroupLayer in the given project.
static QgsProject * instance()
Returns the QgsProject singleton instance.
void syncToLayer(QgsMapLayer *mapLayer) final
Synchronize widgets state with associated map layer.
void apply() override
Applies the settings made in the dialog.
QgsRendererMeshPropertiesWidget(QgsMeshLayer *layer, QgsMapCanvas *canvas, QWidget *parent=nullptr)
A widget to hold the renderer properties for a mesh layer.
static const QgsSettingsEntryInteger * settingsTab
T value(const QString &dynamicKeyPart=QString()) const
Returns settings value.
An integer settings entry.
static QgsSettingsTreeNode * sTreeWindowState