Skip to content

Commit

Permalink
fix feedback of TIN mesh creation
Browse files Browse the repository at this point in the history
  • Loading branch information
vcloarec authored and nyalldawson committed Oct 19, 2020
1 parent 6a2832e commit b5c787b
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 6 deletions.
Expand Up @@ -58,7 +58,7 @@ Adds break lines from a vector layer, return ``True`` if successful.
if the feature iterator contains only point geometries, the vertices will be added only without treating them as breaklines
%End

QgsMesh triangulatedMesh() const;
QgsMesh triangulatedMesh( QgsFeedback *feedBack = 0 ) const;
%Docstring
Returns the triangulated mesh
%End
Expand Down
10 changes: 9 additions & 1 deletion src/analysis/interpolation/qgsdualedgetriangulation.cpp
Expand Up @@ -3264,6 +3264,9 @@ QgsMesh QgsDualEdgeTriangulation::triangulationToMesh( QgsFeedback *feedBack ) c
{
QVector<bool> alreadyVisitedEdges( mHalfEdge.count(), false );

if ( feedBack )
feedBack->setProgress( 0 );

QVector< bool> edgeToTreat( mHalfEdge.count(), true );
QHash<HalfEdge *, int > edgesHash;
for ( int i = 0; i < mHalfEdge.count(); ++i )
Expand All @@ -3277,7 +3280,8 @@ QgsMesh QgsDualEdgeTriangulation::triangulationToMesh( QgsFeedback *feedBack ) c
mesh.vertices.append( *point );
}

for ( int i = 0 ; i < edgeToTreat.count(); ++i )
int edgeCount = edgeToTreat.count();
for ( int i = 0 ; i < edgeCount; ++i )
{
bool containVirtualPoint = false;
if ( edgeToTreat[i] )
Expand All @@ -3296,6 +3300,10 @@ QgsMesh QgsDualEdgeTriangulation::triangulationToMesh( QgsFeedback *feedBack ) c
if ( !containVirtualPoint )
mesh.faces.append( face );
}
if ( feedBack )
{
feedBack->setProgress( ( 100 * i ) / edgeCount ) ;
}
}

return mesh;
Expand Down
4 changes: 2 additions & 2 deletions src/analysis/mesh/qgsmeshtriangulation.cpp
Expand Up @@ -94,9 +94,9 @@ bool QgsMeshTriangulation::addBreakLines( QgsFeatureIterator &lineFeatureIterato
return true;
}

QgsMesh QgsMeshTriangulation::triangulatedMesh() const
QgsMesh QgsMeshTriangulation::triangulatedMesh( QgsFeedback *feedBack ) const
{
return mTriangulation->triangulationToMesh();
return mTriangulation->triangulationToMesh( feedBack );
}

void QgsMeshTriangulation::setCrs( const QgsCoordinateReferenceSystem &crs )
Expand Down
2 changes: 1 addition & 1 deletion src/analysis/mesh/qgsmeshtriangulation.h
Expand Up @@ -73,7 +73,7 @@ class ANALYSIS_EXPORT QgsMeshTriangulation : public QObject
bool addBreakLines( QgsFeatureIterator &lineFeatureIterator, int valueAttribute, const QgsCoordinateTransform &transformContext, QgsFeedback *feedback = nullptr, long featureCount = 1 );

//! Returns the triangulated mesh
QgsMesh triangulatedMesh() const;
QgsMesh triangulatedMesh( QgsFeedback *feedBack = nullptr ) const;

//! Sets the coordinate reference system used for the triangulation
void setCrs( const QgsCoordinateReferenceSystem &crs );
Expand Down
14 changes: 13 additions & 1 deletion src/analysis/processing/qgsalgorithmtinmeshcreation.cpp
Expand Up @@ -132,13 +132,17 @@ QVariantMap QgsTinMeshCreationAlgorithm::processAlgorithm( const QVariantMap &pa
destinationCrs = context.project()->crs();
triangulation.setCrs( destinationCrs );

if ( !mVerticesLayer.isEmpty() && feedback )
feedback->setProgressText( QObject::tr( "Add vertices layer(s) to the triangulation" ) );
for ( Layer &l : mVerticesLayer )
{
if ( feedback && feedback->isCanceled() )
break;
triangulation.addVertices( l.fit, l.attributeIndex, l.transform, feedback, l.featureCount );
}

if ( !mBreakLinesLayer.isEmpty() && feedback )
feedback->setProgressText( QObject::tr( "Add break lines layer(s) to the triangulation" ) );
for ( Layer &l : mBreakLinesLayer )
{
if ( feedback && feedback->isCanceled() )
Expand All @@ -152,9 +156,17 @@ QVariantMap QgsTinMeshCreationAlgorithm::processAlgorithm( const QVariantMap &pa
const QString fileName = parameterAsFile( parameters, QStringLiteral( "OUTPUT_MESH" ), context );
int driverIndex = parameterAsEnum( parameters, QStringLiteral( "MESH_FORMAT" ), context );
const QString driver = mAvailableFormat.at( driverIndex );
const QgsMesh mesh = triangulation.triangulatedMesh();
if ( feedback )
feedback->setProgressText( QObject::tr( "Create mesh from triangulation" ) );
const QgsMesh mesh = triangulation.triangulatedMesh( feedback );

if ( feedback && feedback->isCanceled() )
return QVariantMap();

const QgsProviderMetadata *providerMetadata = QgsProviderRegistry::instance()->providerMetadata( QStringLiteral( "mdal" ) );

if ( feedback )
feedback->setProgressText( QObject::tr( "Save mesh to file" ) );
if ( providerMetadata )
providerMetadata->createMeshData( mesh, fileName, driver, destinationCrs );

Expand Down

0 comments on commit b5c787b

Please sign in to comment.