QGIS API Documentation 3.99.0-Master (e9821da5c6b)
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#include <QString>
27
28#include "moc_qgsmeshrendereractivedatasetwidget.cpp"
29
30using namespace Qt::StringLiterals;
31
33 : QWidget( parent )
34{
35 setupUi( this );
36
37 connect( mDatasetGroupTreeView, &QgsMeshActiveDatasetGroupTreeView::activeScalarGroupChanged, this, &QgsMeshRendererActiveDatasetWidget::onActiveScalarGroupChanged );
38 connect( mDatasetGroupTreeView, &QgsMeshActiveDatasetGroupTreeView::activeVectorGroupChanged, this, &QgsMeshRendererActiveDatasetWidget::onActiveVectorGroupChanged );
39}
40
42
43
45{
46 if ( mMeshLayer )
47 {
50 }
51
52 mMeshLayer = layer;
53
54 mDatasetGroupTreeView->setLayer( layer );
57}
58
60{
61 return mActiveScalarDatasetGroup;
62}
63
65{
66 return mActiveVectorDatasetGroup;
67}
68
69
70void QgsMeshRendererActiveDatasetWidget::onActiveScalarGroupChanged( int groupIndex )
71{
72 if ( groupIndex == mActiveScalarDatasetGroup )
73 return;
74
75 mActiveScalarDatasetGroup = groupIndex;
76 updateMetadata();
77 emit activeScalarGroupChanged( mActiveScalarDatasetGroup );
78 emit widgetChanged();
79}
80
81void QgsMeshRendererActiveDatasetWidget::onActiveVectorGroupChanged( int groupIndex )
82{
83 if ( groupIndex == mActiveVectorDatasetGroup )
84 return;
85
86 mActiveVectorDatasetGroup = groupIndex;
87 updateMetadata();
88 emit activeVectorGroupChanged( mActiveVectorDatasetGroup );
89 emit widgetChanged();
90}
91
92void QgsMeshRendererActiveDatasetWidget::updateMetadata()
93{
94 QString msg;
95
96 if ( !mMeshLayer || !mMeshLayer->dataProvider() )
97 {
98 msg += tr( "Invalid mesh layer selected" );
99 }
100 else
101 {
102 if ( mActiveScalarDatasetGroup > -1 )
103 {
104 if ( mActiveVectorDatasetGroup > -1 )
105 {
106 if ( mActiveScalarDatasetGroup == mActiveVectorDatasetGroup )
107 {
108 msg += metadata( mActiveScalarDatasetGroup );
109 }
110 else
111 {
112 msg += u"<p> <h3> %1 </h3> "_s.arg( tr( "Scalar dataset" ) );
113 msg += metadata( mActiveScalarDatasetGroup );
114 msg += u"</p> <p> <h3> %1 </h3>"_s.arg( tr( "Vector dataset" ) );
115 msg += metadata( mActiveVectorDatasetGroup );
116 msg += "</p>"_L1;
117 }
118 }
119 else
120 {
121 msg += metadata( mActiveScalarDatasetGroup );
122 }
123 }
124 else
125 {
126 if ( mActiveVectorDatasetGroup > -1 )
127 {
128 msg += metadata( mActiveVectorDatasetGroup );
129 }
130 else
131 {
132 msg += tr( "No mesh dataset selected" );
133 }
134 }
135 }
136
137 mActiveDatasetMetadata->setText( msg );
138}
139
140
141QString QgsMeshRendererActiveDatasetWidget::metadata( QgsMeshDatasetIndex datasetIndex )
142{
143 QString msg;
144 msg += "<table>"_L1;
145
146 QString definedOnMesh;
147 if ( mMeshLayer->contains( QgsMesh::ElementType::Face ) )
148 {
149 if ( mMeshLayer->contains( QgsMesh::ElementType::Edge ) )
150 {
151 definedOnMesh = tr( "faces and edges" );
152 }
153 else
154 {
155 definedOnMesh = tr( "faces" );
156 }
157 }
158 else if ( mMeshLayer->contains( QgsMesh::ElementType::Edge ) )
159 {
160 definedOnMesh = tr( "edges" );
161 }
162 else
163 {
164 definedOnMesh = tr( "invalid mesh" );
165 }
166 msg += u"<tr><td>%1</td><td>%2</td></tr>"_s
167 .arg( tr( "Mesh type" ) )
168 .arg( definedOnMesh );
169
170 const QgsMeshDatasetGroupMetadata gmeta = mMeshLayer->datasetGroupMetadata( datasetIndex );
171 QString definedOn;
172 switch ( gmeta.dataType() )
173 {
175 definedOn = tr( "vertices" );
176 break;
178 definedOn = tr( "faces" );
179 break;
181 definedOn = tr( "volumes" );
182 break;
184 definedOn = tr( "edges" );
185 break;
186 }
187 msg += u"<tr><td>%1</td><td>%2</td></tr>"_s
188 .arg( tr( "Data type" ) )
189 .arg( definedOn );
190
191 msg += u"<tr><td>%1</td><td>%2</td></tr>"_s
192 .arg( tr( "Is vector" ) )
193 .arg( gmeta.isVector() ? tr( "Yes" ) : tr( "No" ) );
194
195 const auto options = gmeta.extraOptions();
196 for ( auto it = options.constBegin(); it != options.constEnd(); ++it )
197 {
198 if ( it.key() == "classification"_L1 )
199 {
200 msg += u"<tr><td>%1</td></tr>"_s.arg( tr( "Classified values" ) );
201 continue;
202 }
203 msg += u"<tr><td>%1</td><td>%2</td></tr>"_s.arg( it.key() ).arg( it.value() );
204 }
205
206 msg += "</table>"_L1;
207
208 return msg;
209}
210
212{
213 setEnabled( mMeshLayer );
214
215 whileBlocking( mDatasetGroupTreeView )->syncToLayer();
216
217 mActiveScalarDatasetGroup = mDatasetGroupTreeView->activeScalarGroup();
218 mActiveVectorDatasetGroup = mDatasetGroupTreeView->activeVectorGroup();
219
220 updateMetadata();
221}
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:6828