diff --git a/ApplicationLibCode/ModelVisualization/Intersections/RivEnclosingPolygonGenerator.cpp b/ApplicationLibCode/ModelVisualization/Intersections/RivEnclosingPolygonGenerator.cpp index 1d95fd552e..c979c91947 100644 --- a/ApplicationLibCode/ModelVisualization/Intersections/RivEnclosingPolygonGenerator.cpp +++ b/ApplicationLibCode/ModelVisualization/Intersections/RivEnclosingPolygonGenerator.cpp @@ -19,6 +19,7 @@ #include "RivEnclosingPolygonGenerator.h" #include "cvfMath.h" +#include #include RivEnclosingPolygonGenerator::RivEnclosingPolygonGenerator() diff --git a/GrpcInterface/RiaGrpcGridGeometryExtractionService.cpp b/GrpcInterface/RiaGrpcGridGeometryExtractionService.cpp index 0152555b22..6996b3730f 100644 --- a/GrpcInterface/RiaGrpcGridGeometryExtractionService.cpp +++ b/GrpcInterface/RiaGrpcGridGeometryExtractionService.cpp @@ -179,15 +179,11 @@ grpc::Status RiaGrpcGridGeometryExtractionService::GetGridSurface( grpc::ServerC // Weld surface vertices cvf::VertexWelder surfaceVertexWelder; - const cvf::uint numSurfaceWelderBuckets = static_cast( gridSurfaceVertices->size() ); - surfaceVertexWelder.initialize( weldingDistance, weldingCellSize, numSurfaceWelderBuckets ); - const auto& surfaceVertexIndices = weldVertices( surfaceVertexWelder, *gridSurfaceVertices ); + const auto& surfaceVertexIndices = initAndWeldVertices( surfaceVertexWelder, *gridSurfaceVertices ); // Weld fault vertices cvf::VertexWelder faultVertexWelder; - const cvf::uint numFaultWelderBuckets = static_cast( gridFaultVertices->size() ); - faultVertexWelder.initialize( weldingDistance, weldingCellSize, numFaultWelderBuckets ); - const auto& faultVertexIndices = weldVertices( faultVertexWelder, *gridFaultVertices ); + const auto& faultVertexIndices = initAndWeldVertices( faultVertexWelder, *gridFaultVertices ); m_elapsedTimeInfo.elapsedTimePerEventMs["WeldVertices"] = static_cast( weldVerticesTimeCount.elapsedMsCount() ); @@ -429,17 +425,22 @@ std::vector RiaGrpcGridGeometryExtractionService::cre //-------------------------------------------------------------------------------------------------- /// Weld vertices and return array of indices of welded vertices //-------------------------------------------------------------------------------------------------- -std::vector RiaGrpcGridGeometryExtractionService::weldVertices( cvf::VertexWelder& rWelder, - const cvf::Vec3fArray& vertices ) +std::vector RiaGrpcGridGeometryExtractionService::initAndWeldVertices( cvf::VertexWelder& rWelder, + const cvf::Vec3fArray& vertices ) const { - std::vector vertexIndices; + // Initialize welder + const cvf::uint numBuckets = static_cast( vertices.size() ); + rWelder.initialize( m_weldingDistance, m_weldingCellSize, numBuckets ); + + // Weld vertices + std::vector weldedVertexIndices; for ( const auto& vertex : vertices ) { bool wasWelded = false; const auto welderIndex = rWelder.weldVertex( vertex, &wasWelded ); - vertexIndices.push_back( welderIndex ); + weldedVertexIndices.push_back( welderIndex ); } - return vertexIndices; + return weldedVertexIndices; } //-------------------------------------------------------------------------------------------------- diff --git a/GrpcInterface/RiaGrpcGridGeometryExtractionService.h b/GrpcInterface/RiaGrpcGridGeometryExtractionService.h index 5eaa148d08..8ae954aaa5 100644 --- a/GrpcInterface/RiaGrpcGridGeometryExtractionService.h +++ b/GrpcInterface/RiaGrpcGridGeometryExtractionService.h @@ -64,7 +64,7 @@ public: public: std::vector createCallbacks() override; - static std::vector weldVertices( cvf::VertexWelder& rWelder, const cvf::Vec3fArray& vertices ); + std::vector initAndWeldVertices( cvf::VertexWelder& rWelder, const cvf::Vec3fArray& vertices ) const; private: void resetInternalPointers(); @@ -85,6 +85,12 @@ private: std::unique_ptr m_surfaceFaceVisibilityFilter = nullptr; std::unique_ptr m_faultFaceVisibilityFilter = nullptr; + // Vertex welding + // - Low welding distance, as the goal is to weld duplicate vertices + // - Welding is done for surface and fault vertices separately + const double m_weldingDistance = 1e-3; + const double m_weldingCellSize = 4.0 * m_weldingDistance; + struct ElapsedTimeInfo { std::uint32_t totalTimeElapsedMs = 0; // Total time elapsed for entire request