From 3468160d8f885a8f7cbcd39359cd3b44857b60c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Mon, 7 Sep 2015 16:15:37 +0200 Subject: [PATCH] (#415) Use AABB tree for searching after cells close to line segment for Eclipse cases Fixed crash when well path geometry is empty --- .../ReservoirDataModel/RigEclipseWellLogExtractor.cpp | 10 ++++++++-- ApplicationCode/ReservoirDataModel/RigMainGrid.cpp | 2 +- ApplicationCode/ReservoirDataModel/RigMainGrid.h | 4 ++-- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/ApplicationCode/ReservoirDataModel/RigEclipseWellLogExtractor.cpp b/ApplicationCode/ReservoirDataModel/RigEclipseWellLogExtractor.cpp index 2e43d866a3..6a9bd3d72e 100644 --- a/ApplicationCode/ReservoirDataModel/RigEclipseWellLogExtractor.cpp +++ b/ApplicationCode/ReservoirDataModel/RigEclipseWellLogExtractor.cpp @@ -26,6 +26,7 @@ #include "cvfGeometryTools.h" #include "RigWellLogExtractionTools.h" +#include "RigMainGrid.h" //================================================================================================== /// @@ -47,6 +48,8 @@ void RigEclipseWellLogExtractor::calculateIntersection() double globalMeasuredDepth = 0; // Where do we start ? z - of first well path point ? + if (!m_wellPath->m_wellPathPoints.size()) return ; + for (size_t wpp = 0; wpp < m_wellPath->m_wellPathPoints.size() - 1; ++wpp) { cvf::BoundingBox bb; @@ -133,10 +136,13 @@ void RigEclipseWellLogExtractor::curveData(const RigResultAccessor* resultAccess //-------------------------------------------------------------------------------------------------- std::vector RigEclipseWellLogExtractor::findCloseCells(const cvf::BoundingBox& bb) { + std::vector closeCells; + m_caseData->mainGrid()->findIntersectingCells(bb, &closeCells); + #if 0 const std::vector& cells = m_caseData->mainGrid()->cells(); const std::vector& nodeCoords = m_caseData->mainGrid()->nodes(); - std::vector closeCells; + size_t cellCount = cells.size(); for (size_t cIdx = 0; cIdx < cellCount; ++cIdx) @@ -157,7 +163,7 @@ std::vector RigEclipseWellLogExtractor::findCloseCells(const cvf::Boundi closeCells.push_back(cIdx); } } - + #endif return closeCells; } diff --git a/ApplicationCode/ReservoirDataModel/RigMainGrid.cpp b/ApplicationCode/ReservoirDataModel/RigMainGrid.cpp index 630c787ea4..720c4aaae5 100644 --- a/ApplicationCode/ReservoirDataModel/RigMainGrid.cpp +++ b/ApplicationCode/ReservoirDataModel/RigMainGrid.cpp @@ -446,7 +446,7 @@ const RigFault* RigMainGrid::findFaultFromCellIndexAndCellFace(size_t reservoirC //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RigMainGrid::findIntersectingCells(const cvf::BoundingBox& inputBB, std::vector* cellIndices) +void RigMainGrid::findIntersectingCells(const cvf::BoundingBox& inputBB, std::vector* cellIndices) const { if (m_cellSearchTree.isNull()) { diff --git a/ApplicationCode/ReservoirDataModel/RigMainGrid.h b/ApplicationCode/ReservoirDataModel/RigMainGrid.h index e12148a817..62d4312e79 100644 --- a/ApplicationCode/ReservoirDataModel/RigMainGrid.h +++ b/ApplicationCode/ReservoirDataModel/RigMainGrid.h @@ -68,7 +68,7 @@ public: void setDisplayModelOffset(cvf::Vec3d offset); void setFlipAxis(bool flipXAxis, bool flipYAxis); - void findIntersectingCells(const cvf::BoundingBox& inputBB, std::vector* cellIndices); + void findIntersectingCells(const cvf::BoundingBox& inputBB, std::vector* cellIndices) const; private: void initAllSubGridsParentGridPointer(); @@ -87,7 +87,7 @@ private: cvf::ref m_faultsPrCellAcc; cvf::Vec3d m_displayModelOffset; - cvf::ref m_cellSearchTree; + mutable cvf::ref m_cellSearchTree; bool m_flipXAxis; bool m_flipYAxis;