QGIS API Documentation 3.99.0-Master (21b3aa880ba)
Loading...
Searching...
No Matches
qgsmeshrendereractivedatasetwidget.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgsmeshrendereractivedatasetwidget.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 "qgsapplication.h"
20#include "qgsmeshlayer.h"
22#include "qgsmessagelog.h"
23
24#include <QDateTime>
25#include <QIcon>
26
27#include "moc_qgsmeshrendereractivedatasetwidget.cpp"
28
30 : QWidget( parent )
31{
32 setupUi( this );
33
34 connect( mDatasetGroupTreeView, &QgsMeshActiveDatasetGroupTreeView::activeScalarGroupChanged, this, &QgsMeshRendererActiveDatasetWidget::onActiveScalarGroupChanged );
35 connect( mDatasetGroupTreeView, &QgsMeshActiveDatasetGroupTreeView::activeVectorGroupChanged, this, &QgsMeshRendererActiveDatasetWidget::onActiveVectorGroupChanged );
36}
37
39
40
42{
43 if ( mMeshLayer )
44 {
47 }
48
49 mMeshLayer = layer;
50
51 mDatasetGroupTreeView->setLayer( layer );
54}
55
57{
58 return mActiveScalarDatasetGroup;
59}
60
62{
63 return mActiveVectorDatasetGroup;
64}
65
66
67void QgsMeshRendererActiveDatasetWidget::onActiveScalarGroupChanged( int groupIndex )
68{
69 if ( groupIndex == mActiveScalarDatasetGroup )
70 return;
71
72 mActiveScalarDatasetGroup = groupIndex;
73 updateMetadata();
74 emit activeScalarGroupChanged( mActiveScalarDatasetGroup );
75 emit widgetChanged();
76}
77
78void QgsMeshRendererActiveDatasetWidget::onActiveVectorGroupChanged( int groupIndex )
79{
80 if ( groupIndex == mActiveVectorDatasetGroup )
81 return;
82
83 mActiveVectorDatasetGroup = groupIndex;
84 updateMetadata();
85 emit activeVectorGroupChanged( mActiveVectorDatasetGroup );
86 emit widgetChanged();
87}
88
89void QgsMeshRendererActiveDatasetWidget::updateMetadata()
90{
91 QString msg;
92
93 if ( !mMeshLayer || !mMeshLayer->dataProvider() )
94 {
95 msg += tr( "Invalid mesh layer selected" );
96 }
97 else
98 {
99 if ( mActiveScalarDatasetGroup > -1 )
100 {
101 if ( mActiveVectorDatasetGroup > -1 )
102 {
103 if ( mActiveScalarDatasetGroup == mActiveVectorDatasetGroup )
104 {
105 msg += metadata( mActiveScalarDatasetGroup );
106 }
107 else
108 {
109 msg += QStringLiteral( "<p> <h3> %1 </h3> " ).arg( tr( "Scalar dataset" ) );
110 msg += metadata( mActiveScalarDatasetGroup );
111 msg += QStringLiteral( "</p> <p> <h3> %1 </h3>" ).arg( tr( "Vector dataset" ) );
112 msg += metadata( mActiveVectorDatasetGroup );
113 msg += QLatin1String( "</p>" );
114 }
115 }
116 else
117 {
118 msg += metadata( mActiveScalarDatasetGroup );
119 }
120 }
121 else
122 {
123 if ( mActiveVectorDatasetGroup > -1 )
124 {
125 msg += metadata( mActiveVectorDatasetGroup );
126 }
127 else
128 {
129 msg += tr( "No mesh dataset selected" );
130 }
131 }
132 }
133
134 mActiveDatasetMetadata->setText( msg );
135}
136
137
138QString QgsMeshRendererActiveDatasetWidget::metadata( QgsMeshDatasetIndex datasetIndex )
139{
140 QString msg;
141 msg += QLatin1String( "<table>" );
142
143 QString definedOnMesh;
144 if ( mMeshLayer->contains( QgsMesh::ElementType::Face ) )
145 {
146 if ( mMeshLayer->contains( QgsMesh::ElementType::Edge ) )
147 {
148 definedOnMesh = tr( "faces and edges" );
149 }
150 else
151 {
152 definedOnMesh = tr( "faces" );
153 }
154 }
155 else if ( mMeshLayer->contains( QgsMesh::ElementType::Edge ) )
156 {
157 definedOnMesh = tr( "edges" );
158 }
159 else
160 {
161 definedOnMesh = tr( "invalid mesh" );
162 }
163 msg += QStringLiteral( "<tr><td>%1</td><td>%2</td></tr>" )
164 .arg( tr( "Mesh type" ) )
165 .arg( definedOnMesh );
166
167 const QgsMeshDatasetGroupMetadata gmeta = mMeshLayer->datasetGroupMetadata( datasetIndex );
168 QString definedOn;
169 switch ( gmeta.dataType() )
170 {
172 definedOn = tr( "vertices" );
173 break;
175 definedOn = tr( "faces" );
176 break;
178 definedOn = tr( "volumes" );
179 break;
181 definedOn = tr( "edges" );
182 break;
183 }
184 msg += QStringLiteral( "<tr><td>%1</td><td>%2</td></tr>" )
185 .arg( tr( "Data type" ) )
186 .arg( definedOn );
187
188 msg += QStringLiteral( "<tr><td>%1</td><td>%2</td></tr>" )
189 .arg( tr( "Is vector" ) )
190 .arg( gmeta.isVector() ? tr( "Yes" ) : tr( "No" ) );
191
192 const auto options = gmeta.extraOptions();
193 for ( auto it = options.constBegin(); it != options.constEnd(); ++it )
194 {
195 if ( it.key() == QLatin1String( "classification" ) )
196 {
197 msg += QStringLiteral( "<tr><td>%1</td></tr>" ).arg( tr( "Classified values" ) );
198 continue;
199 }
200 msg += QStringLiteral( "<tr><td>%1</td><td>%2</td></tr>" ).arg( it.key() ).arg( it.value() );
201 }
202
203 msg += QLatin1String( "</table>" );
204
205 return msg;
206}
207
209{
210 setEnabled( mMeshLayer );
211
212 whileBlocking( mDatasetGroupTreeView )->syncToLayer();
213
214 mActiveScalarDatasetGroup = mDatasetGroupTreeView->activeScalarGroup();
215 mActiveVectorDatasetGroup = mDatasetGroupTreeView->activeVectorGroup();
216
217 updateMetadata();
218}
void setActiveScalarGroup(int group)
Sets active group for contours.
void setActiveVectorGroup(int group)
Sets active vector group.
void activeVectorGroupChanged(int groupIndex)
Selected dataset group for vectors changed. -1 for invalid group.
void activeScalarGroupChanged(int groupIndex)
Selected dataset group for contours changed. -1 for invalid group.
QMap< QString, QString > extraOptions() const
Returns extra metadata options, for example description.
bool isVector() const
Returns whether dataset group has vector data.
DataType dataType() const
Returns whether dataset group data is defined on vertices or faces or volumes.
@ DataOnEdges
Data is defined on edges.
@ DataOnFaces
Data is defined on faces.
@ DataOnVertices
Data is defined on vertices.
@ DataOnVolumes
Data is defined on volumes.
An index that identifies the dataset group (e.g.
Represents a mesh layer supporting display of data on structured or unstructured meshes.
void activeScalarDatasetGroupChanged(int index)
Emitted when active scalar group dataset is changed.
void activeVectorDatasetGroupChanged(int index)
Emitted when active vector group dataset is changed.
QgsMeshRendererActiveDatasetWidget(QWidget *parent=nullptr)
A widget to hold the renderer scalar settings for a mesh layer.
int activeVectorDatasetGroup() const
Returns index of the active vector dataset group.
void syncToLayer()
Synchronizes widgets state with associated mesh layer.
void widgetChanged()
Emitted when any settings related to rendering changed.
int activeScalarDatasetGroup() const
Returns index of the active scalar dataset group.
void setLayer(QgsMeshLayer *layer)
Associates mesh layer with the widget.
void activeScalarGroupChanged(int groupIndex)
Emitted when the current scalar group gets changed.
void activeVectorGroupChanged(int groupIndex)
Emitted when the current vector group gets changed.
QgsSignalBlocker< Object > whileBlocking(Object *object)
Temporarily blocks signals from a QObject while calling a single method from the object.
Definition qgis.h:6511