28 QString QgsTinMeshCreationAlgorithm::group()
const
30 return QObject::tr(
"Mesh" );
33 QString QgsTinMeshCreationAlgorithm::groupId()
const
35 return QStringLiteral(
"mesh" );
38 QString QgsTinMeshCreationAlgorithm::shortHelpString()
const
40 return QObject::tr(
"TIN mesh creation from vector layers" );
43 QString QgsTinMeshCreationAlgorithm::name()
const
45 return QStringLiteral(
"tinmeshcreation" );
48 QString QgsTinMeshCreationAlgorithm::displayName()
const
50 return QObject::tr(
"TIN Mesh Creation" );
55 return new QgsTinMeshCreationAlgorithm();
58 void QgsTinMeshCreationAlgorithm::initAlgorithm(
const QVariantMap &configuration )
60 Q_UNUSED( configuration );
65 QList<QgsMeshDriverMetadata> driverList;
71 mAvailableFormat.append( driverMeta.name() );
73 addParameter(
new QgsProcessingParameterEnum( QStringLiteral(
"MESH_FORMAT" ), QObject::tr(
"Output format" ), mAvailableFormat,
false, 0 ) );
74 addParameter(
new QgsProcessingParameterCrs( QStringLiteral(
"CRS_OUTPUT" ), QObject::tr(
"Output Coordinate System" ), QVariant(),
true ) );
80 const QVariant layersVariant = parameters.value( parameterDefinition( QStringLiteral(
"SOURCE_DATA" ) )->name() );
81 if ( layersVariant.type() != QVariant::List )
84 const QVariantList layersList = layersVariant.toList();
90 for (
const QVariant &layer : layersList )
95 if ( layer.type() != QVariant::Map )
97 const QVariantMap layerMap = layer.toMap();
98 const QString layerSource = layerMap.value( QStringLiteral(
"source" ) ).toString();
101 int attributeIndex = layerMap.value( QStringLiteral(
"attributeIndex" ) ).toInt();
105 if ( !featureSource )
109 int featureCount = featureSource->featureCount();
113 mVerticesLayer.append( {featureSource->getFeatures(), transform, attributeIndex, featureCount} );
116 mBreakLinesLayer.append( {featureSource->getFeatures(), transform, attributeIndex, featureCount} );
123 if ( mVerticesLayer.isEmpty() && mBreakLinesLayer.isEmpty() )
135 triangulation.
setCrs( destinationCrs );
137 if ( !mVerticesLayer.isEmpty() && feedback )
138 feedback->
setProgressText( QObject::tr(
"Adding vertices layer(s) to the triangulation" ) );
139 for ( Layer &l : mVerticesLayer )
143 triangulation.
addVertices( l.fit, l.attributeIndex, l.transform, feedback, l.featureCount );
146 if ( !mBreakLinesLayer.isEmpty() && feedback )
147 feedback->
setProgressText( QObject::tr(
"Adding break lines layer(s) to the triangulation" ) );
148 for ( Layer &l : mBreakLinesLayer )
152 triangulation.
addBreakLines( l.fit, l.attributeIndex, l.transform, feedback, l.featureCount );
156 return QVariantMap();
158 const QString fileName = parameterAsFile( parameters, QStringLiteral(
"OUTPUT_MESH" ), context );
159 int driverIndex = parameterAsEnum( parameters, QStringLiteral(
"MESH_FORMAT" ), context );
160 const QString driver = mAvailableFormat.at( driverIndex );
162 feedback->
setProgressText( QObject::tr(
"Creating mesh from triangulation" ) );
166 return QVariantMap();
172 if ( providerMetadata )
173 providerMetadata->
createMeshData( mesh, fileName, driver, destinationCrs );
181 if ( driver ==
"SELAFIN" )
183 addZValueDataset( fileName, mesh, driver );
187 ret[QStringLiteral(
"OUTPUT_MESH" )] = fileName;
192 void QgsTinMeshCreationAlgorithm::addZValueDataset(
const QString &fileName,
const QgsMesh &mesh,
const QString &driver )
194 std::unique_ptr<QgsMeshLayer> tempLayer = qgis::make_unique<QgsMeshLayer>( fileName,
"temp",
"mdal" );
196 tempLayer->addDatasets( zValueDatasetGroup );
197 int datasetGroupIndex = tempLayer->datasetGroupCount() - 1;
198 tempLayer->saveDataset( fileName, datasetGroupIndex, driver );
201 bool QgsTinMeshCreationAlgorithm::canExecute( QString *errorMessage )
const
203 if ( mAvailableFormat.count() == 0 )
205 *errorMessage = QObject::tr(
"MDAL not available" );
This class represents a coordinate reference system (CRS).
bool isValid() const
Returns whether this CRS is correctly initialized and usable.
bool isCanceled() const
Tells whether the operation has been canceled already.
Class that handles mesh creation with Delaunay constrained triangulation.
bool addBreakLines(QgsFeatureIterator &lineFeatureIterator, int valueAttribute, const QgsCoordinateTransform &transformContext, QgsFeedback *feedback=nullptr, long featureCount=1)
Adds break lines from a vector layer, return true if successful.
void setCrs(const QgsCoordinateReferenceSystem &crs)
Sets the coordinate reference system used for the triangulation.
bool addVertices(QgsFeatureIterator &vertexFeatureIterator, int valueAttribute, const QgsCoordinateTransform &transform, QgsFeedback *feedback=nullptr, long featureCount=1)
Adds vertices to the triangulation from a feature iterator, return true if successful.
QgsMesh triangulatedMesh(QgsFeedback *feedback=nullptr) const
Returns the triangulated mesh.
Convenient class that can be used to obtain a datasetgroup on vertices that represents the Z value of...
Abstract base class for processing algorithms.
Details for layers to load into projects.
Contains information about the context in which a processing algorithm is executed.
QgsCoordinateTransformContext transformContext() const
Returns the coordinate transform context.
QgsProject * project() const
Returns the project in which the algorithm is being executed.
void addLayerToLoadOnCompletion(const QString &layer, const QgsProcessingContext::LayerDetails &details)
Adds a layer to load (by ID or datasource) into the canvas upon completion of the algorithm or model.
Base class for providing feedback from a processing algorithm.
virtual void setProgressText(const QString &text)
Sets a progress report text string.
A coordinate reference system parameter for processing algorithms.
An enum based parameter for processing algorithms, allowing for selection from predefined values.
A generic file based destination parameter, for specifying the destination path for a file (non-map l...
@ Mesh
Mesh layer type, since QGIS 3.6.
static QgsProcessingFeatureSource * variantToSource(const QVariant &value, QgsProcessingContext &context, const QVariant &fallbackValue=QVariant())
Converts a variant value to a new feature source.
QgsCoordinateReferenceSystem crs
static QgsProviderRegistry * instance(const QString &pluginPath=QString())
Means of accessing canonical single instance.
QgsProviderMetadata * providerMetadata(const QString &providerKey) const
Returns metadata of the provider or nullptr if not found.
Mesh - vertices, edges and faces.