From a309ffd1ea2265261be5cad2b6e3aff6f550eaab Mon Sep 17 00:00:00 2001 From: Gaute Lindkvist Date: Thu, 10 Jan 2019 17:21:06 +0100 Subject: [PATCH] #3941 Slighly improve contour map performance --- .../RimContourMapProjection.cpp | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/ApplicationCode/ProjectDataModel/RimContourMapProjection.cpp b/ApplicationCode/ProjectDataModel/RimContourMapProjection.cpp index 6a93f1f683..a4ccede25d 100644 --- a/ApplicationCode/ProjectDataModel/RimContourMapProjection.cpp +++ b/ApplicationCode/ProjectDataModel/RimContourMapProjection.cpp @@ -128,6 +128,18 @@ std::vector RimContourMapProjection::generateTrianglesWithVertexValu } } + std::vector>> subtractPolygons; + if (!m_contourPolygons.empty()) + { + subtractPolygons.resize(m_contourPolygons.size()); + for (size_t i = 0; i < m_contourPolygons.size() - 1; ++i) + { + for (size_t j = 0; j < m_contourPolygons[i + 1].size(); ++j) + { + subtractPolygons[i].push_back(m_contourPolygons[i + 1][j].vertices); + } + } + } std::vector> threadTriangles(omp_get_max_threads()); #pragma omp parallel @@ -137,7 +149,7 @@ std::vector RimContourMapProjection::generateTrianglesWithVertexValu std::set excludedFaceIndices; -#pragma omp for +#pragma omp for schedule(dynamic) for (int64_t i = 0; i < (int64_t) faceList->size(); i += 3) { std::vector triangle(3); @@ -182,22 +194,14 @@ std::vector RimContourMapProjection::generateTrianglesWithVertexValu excludedFaceIndices.insert(i); continue; } - - std::vector> subtractPolygons; - if (c < m_contourPolygons.size() - 1) - { - for (size_t j = 0; j < m_contourPolygons[c + 1].size(); ++j) - { - subtractPolygons.push_back(m_contourPolygons[c + 1][j].vertices); - } - } + std::vector> clippedPolygons; - if (!subtractPolygons.empty()) + if (!subtractPolygons[c].empty()) { for (const std::vector& polygon : intersectPolygons) { - std::vector> fullyClippedPolygons = RigCellGeometryTools::subtractPolygons(polygon, subtractPolygons); + std::vector> fullyClippedPolygons = RigCellGeometryTools::subtractPolygons(polygon, subtractPolygons[c]); clippedPolygons.insert(clippedPolygons.end(), fullyClippedPolygons.begin(), fullyClippedPolygons.end()); } }