54 QDomElement elem = doc.createElement( QStringLiteral(
"mesh-settings" ) );
55 elem.setAttribute( QStringLiteral(
"enabled" ), mEnabled ? QStringLiteral(
"1" ) : QStringLiteral(
"0" ) );
56 elem.setAttribute( QStringLiteral(
"line-width" ), mLineWidth );
63 mEnabled = elem.attribute( QStringLiteral(
"enabled" ) ).toInt();
64 mLineWidth = elem.attribute( QStringLiteral(
"line-width" ) ).toDouble();
72 return mColorRampShader;
77 mColorRampShader = shader;
86 mClassificationMinimum = minimum;
87 mClassificationMaximum = maximum;
96 return mDataInterpolationMethod;
101 mDataInterpolationMethod = dataInterpolationMethod;
106 QDomElement elem = doc.createElement( QStringLiteral(
"scalar-settings" ) );
107 elem.setAttribute( QStringLiteral(
"min-val" ), mClassificationMinimum );
108 elem.setAttribute( QStringLiteral(
"max-val" ), mClassificationMaximum );
109 elem.setAttribute( QStringLiteral(
"opacity" ), mOpacity );
112 switch ( mDataInterpolationMethod )
115 methodTxt = QStringLiteral(
"none" );
117 case NeighbourAverage:
118 methodTxt = QStringLiteral(
"neighbour-average" );
121 elem.setAttribute( QStringLiteral(
"interpolation-method" ), methodTxt );
122 QDomElement elemShader = mColorRampShader.writeXml( doc );
123 elem.appendChild( elemShader );
129 mClassificationMinimum = elem.attribute( QStringLiteral(
"min-val" ) ).toDouble();
130 mClassificationMaximum = elem.attribute( QStringLiteral(
"max-val" ) ).toDouble();
131 mOpacity = elem.attribute( QStringLiteral(
"opacity" ) ).toDouble();
132 QString methodTxt = elem.attribute( QStringLiteral(
"interpolation-method" ) );
133 if ( QStringLiteral(
"neighbour-average" ) == methodTxt )
135 mDataInterpolationMethod = DataInterpolationMethod::NeighbourAverage;
139 mDataInterpolationMethod = DataInterpolationMethod::None;
141 QDomElement elemShader = elem.firstChildElement( QStringLiteral(
"colorrampshader" ) );
142 mColorRampShader.readXml( elemShader );
164 mColor = vectorColor;
174 mFilterMin = vectorFilterMin;
184 mFilterMax = vectorFilterMax;
189 return mOnUserDefinedGrid;
194 mOnUserDefinedGrid = enabled;
199 return mUserGridCellWidth;
204 mUserGridCellWidth = width;
209 return mUserGridCellHeight;
214 mUserGridCellHeight = height;
219 return mShaftLengthMethod;
224 mShaftLengthMethod = shaftLengthMethod;
229 return mMinShaftLength;
234 mMinShaftLength = minShaftLength;
239 return mMaxShaftLength;
244 mMaxShaftLength = maxShaftLength;
254 mScaleFactor = scaleFactor;
259 return mFixedShaftLength;
264 mFixedShaftLength = fixedShaftLength;
269 return mArrowHeadWidthRatio;
274 mArrowHeadWidthRatio = vectorHeadWidthRatio;
279 return mArrowHeadLengthRatio;
284 mArrowHeadLengthRatio = vectorHeadLengthRatio;
289 QDomElement elem = doc.createElement( QStringLiteral(
"vector-arrow-settings" ) );
290 elem.setAttribute( QStringLiteral(
"arrow-head-width-ratio" ), mArrowHeadWidthRatio );
291 elem.setAttribute( QStringLiteral(
"arrow-head-length-ratio" ), mArrowHeadLengthRatio );
293 QDomElement elemShaft = doc.createElement( QStringLiteral(
"shaft-length" ) );
295 switch ( mShaftLengthMethod )
298 methodTxt = QStringLiteral(
"minmax" );
299 elemShaft.setAttribute( QStringLiteral(
"min" ), mMinShaftLength );
300 elemShaft.setAttribute( QStringLiteral(
"max" ), mMaxShaftLength );
303 methodTxt = QStringLiteral(
"scaled" );
304 elemShaft.setAttribute( QStringLiteral(
"scale-factor" ), mScaleFactor );
307 methodTxt = QStringLiteral(
"fixed" ) ;
308 elemShaft.setAttribute( QStringLiteral(
"fixed-length" ), mFixedShaftLength );
311 elemShaft.setAttribute( QStringLiteral(
"method" ), methodTxt );
312 elem.appendChild( elemShaft );
318 mArrowHeadWidthRatio = elem.attribute( QStringLiteral(
"arrow-head-width-ratio" ) ).toDouble();
319 mArrowHeadLengthRatio = elem.attribute( QStringLiteral(
"arrow-head-length-ratio" ) ).toDouble();
321 QDomElement elemShaft = elem.firstChildElement( QStringLiteral(
"shaft-length" ) );
322 QString methodTxt = elemShaft.attribute( QStringLiteral(
"method" ) );
323 if ( QStringLiteral(
"minmax" ) == methodTxt )
325 mShaftLengthMethod = MinMax;
326 mMinShaftLength = elemShaft.attribute( QStringLiteral(
"min" ) ).toDouble();
327 mMaxShaftLength = elemShaft.attribute( QStringLiteral(
"max" ) ).toDouble();
329 else if ( QStringLiteral(
"scaled" ) == methodTxt )
331 mShaftLengthMethod = Scaled;
332 mScaleFactor = elemShaft.attribute( QStringLiteral(
"scale-factor" ) ).toDouble();
336 mShaftLengthMethod = Fixed;
337 mFixedShaftLength = elemShaft.attribute( QStringLiteral(
"fixed-length" ) ).toDouble();
352 return mAveragingMethod.get();
358 mAveragingMethod.reset( method->
clone() );
360 mAveragingMethod.reset();
365 QDomElement elem = doc.createElement( QStringLiteral(
"mesh-renderer-settings" ) );
367 QDomElement elemActiveDataset = doc.createElement( QStringLiteral(
"active-dataset" ) );
368 if ( mActiveScalarDataset.
isValid() )
369 elemActiveDataset.setAttribute( QStringLiteral(
"scalar" ), QStringLiteral(
"%1,%2" ).arg( mActiveScalarDataset.
group() ).arg( mActiveScalarDataset.
dataset() ) );
370 if ( mActiveVectorDataset.
isValid() )
371 elemActiveDataset.setAttribute( QStringLiteral(
"vector" ), QStringLiteral(
"%1,%2" ).arg( mActiveVectorDataset.
group() ).arg( mActiveVectorDataset.
dataset() ) );
372 elem.appendChild( elemActiveDataset );
374 for (
int groupIndex : mRendererScalarSettings.keys() )
377 QDomElement elemScalar = scalarSettings.
writeXml( doc );
378 elemScalar.setAttribute( QStringLiteral(
"group" ), groupIndex );
379 elem.appendChild( elemScalar );
382 for (
int groupIndex : mRendererVectorSettings.keys() )
385 QDomElement elemVector = vectorSettings.
writeXml( doc );
386 elemVector.setAttribute( QStringLiteral(
"group" ), groupIndex );
387 elem.appendChild( elemVector );
390 QDomElement elemNativeMesh = mRendererNativeMeshSettings.
writeXml( doc );
391 elemNativeMesh.setTagName( QStringLiteral(
"mesh-settings-native" ) );
392 elem.appendChild( elemNativeMesh );
394 QDomElement elemTriangularMesh = mRendererTriangularMeshSettings.
writeXml( doc );
395 elemTriangularMesh.setTagName( QStringLiteral(
"mesh-settings-triangular" ) );
396 elem.appendChild( elemTriangularMesh );
398 if ( mAveragingMethod )
400 QDomElement elemAveraging = doc.createElement( QStringLiteral(
"averaging-3d" ) );
401 elemAveraging.setAttribute( QStringLiteral(
"method" ), QStringLiteral(
"%1" ).arg( mAveragingMethod->method() ) ) ;
402 QDomElement elemAveragingParams = mAveragingMethod->writeXml( doc );
403 elemAveraging.appendChild( elemAveragingParams );
404 elem.appendChild( elemAveraging );
412 mRendererScalarSettings.clear();
413 mRendererVectorSettings.clear();
414 mAveragingMethod.reset();
416 QDomElement elemActiveDataset = elem.firstChildElement( QStringLiteral(
"active-dataset" ) );
417 if ( elemActiveDataset.hasAttribute( QStringLiteral(
"scalar" ) ) )
419 QStringList lst = elemActiveDataset.attribute( QStringLiteral(
"scalar" ) ).split( QChar(
',' ) );
420 if ( lst.count() == 2 )
423 if ( elemActiveDataset.hasAttribute( QStringLiteral(
"vector" ) ) )
425 QStringList lst = elemActiveDataset.attribute( QStringLiteral(
"vector" ) ).split( QChar(
',' ) );
426 if ( lst.count() == 2 )
430 QDomElement elemScalar = elem.firstChildElement( QStringLiteral(
"scalar-settings" ) );
431 while ( !elemScalar.isNull() )
433 int groupIndex = elemScalar.attribute( QStringLiteral(
"group" ) ).toInt();
435 scalarSettings.
readXml( elemScalar );
436 mRendererScalarSettings.insert( groupIndex, scalarSettings );
438 elemScalar = elemScalar.nextSiblingElement( QStringLiteral(
"scalar-settings" ) );
441 QDomElement elemVector = elem.firstChildElement( QStringLiteral(
"vector-settings" ) );
442 while ( !elemVector.isNull() )
444 int groupIndex = elemVector.attribute( QStringLiteral(
"group" ) ).toInt();
446 vectorSettings.
readXml( elemVector );
447 mRendererVectorSettings.insert( groupIndex, vectorSettings );
449 elemVector = elemVector.nextSiblingElement( QStringLiteral(
"vector-settings" ) );
452 QDomElement elemNativeMesh = elem.firstChildElement( QStringLiteral(
"mesh-settings-native" ) );
453 mRendererNativeMeshSettings.
readXml( elemNativeMesh );
455 QDomElement elemTriangularMesh = elem.firstChildElement( QStringLiteral(
"mesh-settings-triangular" ) );
456 mRendererTriangularMeshSettings.
readXml( elemTriangularMesh );
458 QDomElement elemAveraging = elem.firstChildElement( QStringLiteral(
"averaging-3d" ) );
459 if ( !elemAveraging.isNull() )
467 return mSeedingMethod;
472 mSeedingMethod = seedingMethod;
477 return mSeedingDensity;
482 mSeedingDensity = seedingDensity;
487 QDomElement elem = doc.createElement( QStringLiteral(
"vector-streamline-settings" ) );
489 elem.setAttribute( QStringLiteral(
"seeding-method" ), mSeedingMethod );
490 elem.setAttribute( QStringLiteral(
"seeding-density" ), mSeedingDensity );
499 elem.attribute( QStringLiteral(
"seeding-method" ) ).toInt() );
500 mSeedingDensity = elem.attribute( QStringLiteral(
"seeding-density" ) ).toDouble();
505 return mDisplayingMethod;
510 mDisplayingMethod = displayingMethod;
515 return mArrowsSettings;
520 mArrowsSettings = arrowSettings;
525 return mStreamLinesSettings;
530 mStreamLinesSettings = streamLinesSettings;
535 QDomElement elem = doc.createElement( QStringLiteral(
"vector-settings" ) );
536 elem.setAttribute( QStringLiteral(
"symbology" ), mDisplayingMethod );
538 elem.setAttribute( QStringLiteral(
"line-width" ), mLineWidth );
540 elem.setAttribute( QStringLiteral(
"filter-min" ), mFilterMin );
541 elem.setAttribute( QStringLiteral(
"filter-max" ), mFilterMax );
543 elem.setAttribute( QStringLiteral(
"user-grid-enabled" ), mOnUserDefinedGrid ? QStringLiteral(
"1" ) : QStringLiteral(
"0" ) );
544 elem.setAttribute( QStringLiteral(
"user-grid-width" ), mUserGridCellWidth );
545 elem.setAttribute( QStringLiteral(
"user-grid-height" ), mUserGridCellHeight );
547 elem.appendChild( mArrowsSettings.writeXml( doc ) );
548 elem.appendChild( mStreamLinesSettings.writeXml( doc ) );
549 elem.appendChild( mTracesSettings.writeXml( doc ) );
557 elem.attribute( QStringLiteral(
"symbology" ) ).toInt() );
559 mLineWidth = elem.attribute( QStringLiteral(
"line-width" ) ).toDouble();
561 mFilterMin = elem.attribute( QStringLiteral(
"filter-min" ) ).toDouble();
562 mFilterMax = elem.attribute( QStringLiteral(
"filter-max" ) ).toDouble();
564 mOnUserDefinedGrid = elem.attribute( QStringLiteral(
"user-grid-enabled" ) ).toInt();
565 mUserGridCellWidth = elem.attribute( QStringLiteral(
"user-grid-width" ) ).toInt();
566 mUserGridCellHeight = elem.attribute( QStringLiteral(
"user-grid-height" ) ).toInt();
568 QDomElement elemVector = elem.firstChildElement( QStringLiteral(
"vector-arrow-settings" ) );
569 if ( ! elemVector.isNull() )
570 mArrowsSettings.readXml( elemVector );
572 QDomElement elemStreamLine = elem.firstChildElement( QStringLiteral(
"vector-streamline-settings" ) );
573 if ( ! elemStreamLine.isNull() )
574 mStreamLinesSettings.readXml( elemStreamLine );
576 QDomElement elemTraces = elem.firstChildElement( QStringLiteral(
"vector-traces-settings" ) );
577 if ( ! elemTraces.isNull() )
578 mTracesSettings.readXml( elemTraces );
583 return mTracesSettings;
588 mTracesSettings = tracesSettings;
593 mMaximumTailLength = elem.attribute( QStringLiteral(
"maximum-tail-length" ) ).toInt();
595 elem.attribute( QStringLiteral(
"maximum-tail-length-unit" ) ).toInt() );
596 mParticlesCount = elem.attribute( QStringLiteral(
"particles-count" ) ).toInt();
601 QDomElement elem = doc.createElement( QStringLiteral(
"vector-traces-settings" ) );
602 elem.setAttribute( QStringLiteral(
"maximum-tail-length" ), mMaximumTailLength );
603 elem.setAttribute( QStringLiteral(
"maximum-tail-length-unit" ), mMaximumTailLengthUnit );
604 elem.setAttribute( QStringLiteral(
"particles-count" ), mParticlesCount );
611 return mMaximumTailLengthUnit;
616 mMaximumTailLengthUnit = maximumTailLengthUnit;
621 return mMaximumTailLength;
626 mMaximumTailLength = maximumTailLength;
631 return mParticlesCount;
636 mParticlesCount = value;
void setArrowHeadLengthRatio(double arrowHeadLengthRatio)
Sets ratio of the head length of the arrow (range 0-1)
void setClassificationMinimumMaximum(double minimum, double maximum)
Sets min/max values used for creation of the color ramp shader.
void setFilterMax(double filterMax)
Sets filter value for vector magnitudes.
void setScaleFactor(double scaleFactor)
Sets scale factor.
void setLineWidth(double lineWidth)
Sets line width used for rendering (in millimeters)
void setUserGridCellHeight(int height)
Sets height of user grid cell (in pixels)
A ramp shader will color a raster pixel based on a list of values ranges in a ramp.
int dataset() const
Returns a dataset index within group()
void readXml(const QDomElement &elem)
Reads configuration from the given DOM element.
void setArrowHeadWidthRatio(double arrowHeadWidthRatio)
Sets ratio of the head width of the arrow (range 0-1)
void setFilterMin(double filterMin)
Sets filter value for vector magnitudes.
QgsMeshRendererVectorTracesSettings tracesSettings() const
Returns settings for vector rendered with traces.
QDomElement writeXml(QDomDocument &doc) const
Writes configuration to a new DOM element.
void setAveragingMethod(QgsMesh3dAveragingMethod *method)
Sets averaging method for conversion of 3d stacked mesh data to 2d data.
Represents a mesh renderer settings for scalar datasets.
bool isEnabled() const
Returns whether mesh structure rendering is enabled.
void readXml(const QDomElement &elem)
Reads configuration from the given DOM element.
QgsMeshRendererVectorArrowSettings arrowSettings() const
Returns settings for vector rendered with arrows.
DataInterpolationMethod dataInterpolationMethod() const
Returns the type of interpolation to use to convert face defined datasets to values on vertices...
~QgsMeshRendererSettings()
Destructor.
double scaleFactor() const
Returns scale factor.
QgsMeshRendererScalarSettings scalarSettings(int groupIndex) const
Returns renderer settings.
int group() const
Returns a group index.
Multi level averaging method specifies limits of vertical layers from the top layer down or reversed...
int particlesCount() const
Returns particles count.
void readXml(const QDomElement &elem)
Reads configuration from the given DOM element.
void setOnUserDefinedGrid(bool enabled)
Toggles drawing of vectors on user defined grid.
double maxShaftLength() const
Returns maximum shaft length (in millimeters)
SeedingStartPointsMethod seedingMethod() const
Returns the method used for seeding start points of strealines.
double filterMin() const
Returns filter value for vector magnitudes.
static QString encodeColor(const QColor &color)
double arrowHeadWidthRatio() const
Returns ratio of the head width of the arrow (range 0-1)
double opacity() const
Returns opacity.
double lineWidth() const
Returns line width used for rendering (in millimeters)
double maximumTailLength() const
Returns the maximum tail length.
QgsMeshRendererVectorArrowSettings::ArrowScalingMethod shaftLengthMethod() const
Returns method used for drawing arrows.
QDomElement writeXml(QDomDocument &doc) const
Writes configuration to a new DOM element.
void setArrowsSettings(const QgsMeshRendererVectorArrowSettings &arrowSettings)
Sets settings for vector rendered with arrows.
virtual QgsMesh3dAveragingMethod * clone() const =0
Clone the instance.
void readXml(const QDomElement &elem)
Reads configuration from the given DOM element.
Represents a streamline renderer settings for vector datasets.
static QgsMesh3dAveragingMethod * createFromXml(const QDomElement &elem)
Creates the instance from XML by calling readXml of derived classes.
DataInterpolationMethod
Interpolation of value defined on vertices from datasets with data defined on faces.
void setFixedShaftLength(double fixedShaftLength)
Sets fixed length (in millimeters)
void setColorRampShader(const QgsColorRampShader &shader)
Sets color ramp shader function.
void setColor(const QColor &color)
Sets color used for drawing arrows.
void readXml(const QDomElement &elem)
Reads configuration from the given DOM element.
QColor color() const
Returns color used for drawing arrows.
SeedingStartPointsMethod
Method used to define start points that are used to draw streamlines.
void setStreamLinesSettings(const QgsMeshRendererVectorStreamlineSettings &streamLinesSettings)
Sets settings for vector rendered with streamlines.
double filterMax() const
Returns filter value for vector magnitudes.
void setSeedingDensity(double seedingDensity)
Sets the density used for seeding start points.
void setDataInterpolationMethod(const DataInterpolationMethod &dataInterpolationMethod)
Sets data interpolation method.
void setSymbology(const Symbology &symbology)
Sets the displaying method used to render vector datasets.
void setMinShaftLength(double minShaftLength)
Sets mininimum shaft length (in millimeters)
void setEnabled(bool enabled)
Sets whether mesh structure rendering is enabled.
void setSeedingMethod(const SeedingStartPointsMethod &seedingMethod)
Sets the method used for seeding start points of strealines.
QgsColorRampShader colorRampShader() const
Returns color ramp shader function.
Symbology
Defines the symbology of vector rendering.
QgsMeshRendererSettings()
Constructs renderer with default single layer averaging method.
void setParticlesCount(int value)
Sets particles count.
QgsMesh3dAveragingMethod * averagingMethod() const
Returns averaging method for conversion of 3d stacked mesh data to 2d data.
double fixedShaftLength() const
Returns fixed arrow length (in millimeters)
void setLineWidth(double lineWidth)
Sets line width of the arrow in pixels (in millimeters)
QgsMeshRendererVectorSettings vectorSettings(int groupIndex) const
Returns renderer settings.
ArrowScalingMethod
Algorithm how to transform vector magnitude to length of arrow on the device in pixels.
void setOpacity(double opacity)
Sets opacity.
void setMaxShaftLength(double maxShaftLength)
Sets maximum shaft length (in millimeters)
int userGridCellWidth() const
Returns width in pixels of user grid cell.
void setTracesSettings(const QgsMeshRendererVectorTracesSettings &tracesSettings)
Sets settings for vector rendered with traces.
QgsUnitTypes::RenderUnit maximumTailLengthUnit() const
Returns the maximum tail length unit.
QDomElement writeXml(QDomDocument &doc) const
Writes configuration to a new DOM element.
void setMaximumTailLengthUnit(const QgsUnitTypes::RenderUnit &maximumTailLengthUnit)
Sets the maximum tail length unit.
QDomElement writeXml(QDomDocument &doc) const
Writes configuration to a new DOM element.
bool isOnUserDefinedGrid() const
Returns whether vectors are drawn on user-defined grid.
QColor color() const
Returns color used for rendering.
QgsMeshDatasetIndex is index that identifies the dataset group (e.g.
QgsMeshRendererVectorStreamlineSettings streamLinesSettings() const
Returns settings for vector rendered with streamlines.
Abstract class to interpolate 3d stacked mesh data to 2d data.
QDomElement writeXml(QDomDocument &doc) const
Writes configuration to a new DOM element.
int userGridCellHeight() const
Returns height in pixels of user grid cell.
bool isValid() const
Returns whether index is valid, ie at least groups is set.
QDomElement writeXml(QDomDocument &doc) const
Writes configuration to a new DOM element.
double lineWidth() const
Returns line width of the arrow (in millimeters)
void setUserGridCellWidth(int width)
Sets width of user grid cell (in pixels)
void setColor(const QColor &color)
Sets color used for rendering of the mesh.
Represents a trace renderer settings for vector datasets displayed by particle traces.
void readXml(const QDomElement &elem)
Reads configuration from the given DOM element.
void setShaftLengthMethod(ArrowScalingMethod shaftLengthMethod)
Sets method used for drawing arrows.
Represents a mesh renderer settings for vector datasets displayed with arrows.
double seedingDensity() const
Returns the density used for seeding start points.
Symbology symbology() const
Returns the displaying method used to render vector datasets.
double classificationMaximum() const
Returns max value used for creation of the color ramp shader.
void setMaximumTailLength(double maximumTailLength)
Sets the maximums tail length.
QDomElement writeXml(QDomDocument &doc) const
Writes configuration to a new DOM element.
void readXml(const QDomElement &elem)
Reads configuration from the given DOM element.
Represents a streamline renderer settings for vector datasets displayed by streamlines.
RenderUnit
Rendering size units.
static QColor decodeColor(const QString &str)
double arrowHeadLengthRatio() const
Returns ratio of the head length of the arrow (range 0-1)
double minShaftLength() const
Returns mininimum shaft length (in millimeters)
double classificationMinimum() const
Returns min value used for creation of the color ramp shader.