31 : mParticleField( std::make_unique<QgsVectorFieldParticleTracesField>( std::move( source ), rendererContext, vectorSettings.vectorStrokeColoring() ) )
32 , mRendererContext( rendererContext )
34 mParticleField->setMinimizeFieldSize( minimizeFieldSize );
35 mParticleField->updateSize( mRendererContext );
52 : mRendererContext( rendererContext )
56 QVector<double> magnitudeValues;
57 bool vectorDataOnVertices;
65 const QgsMeshLayerRendererCache *cache = layer->
rendererCache();
67 if ( cache && ( cache->mDatasetGroupsCount == datasetGroupCount ) && ( cache->mActiveVectorDatasetIndex == datasetIndex ) )
69 vectorDatasetValues = cache->mVectorDatasetValues;
70 scalarActiveFaceFlagValues = cache->mScalarActiveFaceFlagValues;
71 magnitudeValues = cache->mVectorDatasetValuesMag;
72 magMax = cache->mVectorDatasetMagMaximum;
73 vectorDataOnVertices = cache->mVectorDataType == QgsMeshDatasetGroupMetadata::DataOnVertices;
77 const QgsMeshDatasetGroupMetadata metadata = layer->dataProvider()->datasetGroupMetadata( datasetIndex.group() );
78 magMax = metadata.maximum();
79 vectorDataOnVertices = metadata.dataType() == QgsMeshDatasetGroupMetadata::DataOnVertices;
82 if ( vectorDataOnVertices )
83 count = layer->nativeMesh()->vertices.count();
85 count = layer->nativeMesh()->faces.count();
87 vectorDatasetValues = QgsMeshLayerUtils::datasetValues( layer, datasetIndex, 0, count );
88 scalarActiveFaceFlagValues = layer->dataProvider()->areFacesActive( datasetIndex, 0, layer->nativeMesh()->faces.count() );
89 magnitudeValues = QgsMeshLayerUtils::calculateMagnitudes( vectorDatasetValues );
92 mParticleField = std::make_unique<QgsVectorFieldParticleTracesField>(
93 QgsMeshVectorFieldValueSource::create(
96 scalarActiveFaceFlagValues,
103 vectorSettings.vectorStrokeColoring()
107 mParticleField->setMinimizeFieldSize(
false );
108 mParticleField->updateSize( mRendererContext );
112 : mParticleField( std::make_unique<QgsVectorFieldParticleTracesField>( *other.mParticleField ) )
113 , mRendererContext( other.mRendererContext )
115 , mVpixMax( other.mVpixMax )
116 , mParticleLifeTime( other.mParticleLifeTime )
123 mParticleField->setParticlesCount( count );
124 mParticleField->addRandomParticles();
129 mParticleField->moveParticles();
130 return mParticleField->image();
140 updateFieldParameter();
146 updateFieldParameter();
151 mParticleLifeTime = particleLifeTime;
152 updateFieldParameter();
157 mParticleField->setParticlesColor(
c );
162 mParticleField->setParticleSize( width );
167 mParticleField->setTailFactor( fct );
172 mParticleField->setMinTailLength( l );
181 mParticleField->setStumpFactor(
int( 255 * p ) );
186 mParticleField = std::make_unique<QgsVectorFieldParticleTracesField>( *( other.mParticleField ) );
187 const_cast<QgsRenderContext &
>( mRendererContext ) = other.mRendererContext;
189 mVpixMax = other.mVpixMax;
190 mParticleLifeTime = other.mParticleLifeTime;
195void QgsVectorFieldTraceAnimationGenerator::updateFieldParameter()
197 const double fieldTimeStep = mVpixMax /
static_cast<double>( mFps );
198 const double fieldLifeTime = mParticleLifeTime * mFps * fieldTimeStep;
199 mParticleField->setTimeStep( fieldTimeStep );
200 mParticleField->setParticlesLifeTime( fieldLifeTime );
A block of integers/doubles from a mesh dataset.
An index that identifies the dataset group (e.g.
int group() const
Returns a group index.
virtual int datasetGroupCount() const =0
Returns number of datasets groups loaded.
Represents a mesh layer supporting display of data on structured or unstructured meshes.
QgsRectangle extent() const override
Returns the extent of the layer.
QgsMeshRendererSettings rendererSettings() const
Returns renderer settings.
QgsMeshDatasetIndex activeVectorDatasetAtTime(const QgsDateTimeRange &timeRange, int group=-1) const
Returns dataset index from active vector group depending on the time range If the temporal properties...
void reload() override
Synchronises with changes in the datasource.
QgsMesh * nativeMesh()
Returns native mesh (nullptr before rendering or calling to updateMesh).
QgsMeshDataProvider * dataProvider() override
Returns the layer's data provider, it may be nullptr.
QgsTriangularMesh * triangularMesh(double minimumTriangleSize=0) const
Returns triangular mesh (nullptr before rendering or calling to updateMesh).
QgsMeshLayerRendererCache * rendererCache()
Returns native mesh (nullptr before rendering).
QgsVectorFieldSettings vectorSettings(int groupIndex) const
Returns renderer settings.
Contains information about the context of a rendering operation.
const QgsDateTimeRange & temporalRange() const
Returns the datetime range for the object.
Represents a renderer settings for vector datasets.
~QgsVectorFieldTraceAnimationGenerator()
QgsVectorFieldTraceAnimationGenerator & operator=(const QgsVectorFieldTraceAnimationGenerator &other)
void setMinimumTailLength(int l)
Sets the minimum tail length.
QgsVectorFieldTraceAnimationGenerator(std::unique_ptr< QgsVectorFieldValueSource > source, const QgsRenderContext &rendererContext, const QgsVectorFieldSettings &vectorSettings, bool minimizeFieldSize=true)
Constructs a generator sampling the vector field from source, which is taken ownership of.
void seedRandomParticles(int count)
Seeds particles in the vector field.
void setParticlesSize(double width)
Sets particle size in px.
void setMaximumSpeedPixel(int pixels)
Sets the max number of pixels that can be go through by the particles in 1 second.
void setParticlesLifeTime(double particleLifeTime)
Sets maximum life time of particles in seconds.
void setTailFactor(double fct)
Sets the tail factor, used to adjust the length of the tail. 0 : minimum length, >1 increase the tail...
void setTailPersitence(double p)
Sets the visual persistence of the tail.
static QgsVectorFieldTraceAnimationGenerator * fromMeshLayer(QgsMeshLayer *layer, const QgsRenderContext &rendererContext)
Returns a generator for the active vector dataset of layer, or nullptr if the layer has no vector dat...
void setParticlesColor(const QColor &c)
Sets colors of particle.
QImage imageRendered()
Moves all the particles using frame per second (fps) to calculate the displacement and return the ren...
void setFramesPerSecond(int frames)
Sets the number of frames per seconds that will be rendered.
As part of the API refactoring and improvements which landed in the Processing API was substantially reworked from the x version This was done in order to allow much of the underlying Processing framework to be ported into c