From 48141d1c392931197264488f1d2039a285243ef1 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Mon, 17 Mar 2025 13:46:02 +0100 Subject: [PATCH] #12266 Fracture Surface: add warning and hide fracture for unavailable time steps. --- .../Surfaces/RivSurfacePartMgr.cpp | 13 ++++++++++--- .../Surfaces/RimFractureSurface.cpp | 19 ++++++++++++++++++- .../Surfaces/RimFractureSurface.h | 3 ++- .../ProjectDataModel/Surfaces/RimSurface.cpp | 8 ++++++++ .../ProjectDataModel/Surfaces/RimSurface.h | 4 +++- .../Surfaces/RimSurfaceInView.cpp | 14 ++++++++++++++ 6 files changed, 55 insertions(+), 6 deletions(-) diff --git a/ApplicationLibCode/ModelVisualization/Surfaces/RivSurfacePartMgr.cpp b/ApplicationLibCode/ModelVisualization/Surfaces/RivSurfacePartMgr.cpp index de38b6c791..0faa6f5081 100644 --- a/ApplicationLibCode/ModelVisualization/Surfaces/RivSurfacePartMgr.cpp +++ b/ApplicationLibCode/ModelVisualization/Surfaces/RivSurfacePartMgr.cpp @@ -433,7 +433,11 @@ cvf::ref RivSurfacePartMgr::convertToDisplayOffsetVertices( con void RivSurfacePartMgr::generateNativePartGeometry() { m_usedSurfaceData = m_surfaceInView->surface()->surfaceData(); - if ( m_usedSurfaceData.isNull() ) return; + if ( m_usedSurfaceData.isNull() ) + { + m_nativeTrianglesPart = nullptr; + return; + } const std::vector& vertices = m_usedSurfaceData->vertices(); if ( vertices.empty() ) return; @@ -464,8 +468,11 @@ void RivSurfacePartMgr::generateNativePartGeometry() void RivSurfacePartMgr::generateNativeLinesPartGeometry() { m_usedSurfaceData = m_surfaceInView->surface()->surfaceData(); - if ( m_usedSurfaceData.isNull() ) return; - + if ( m_usedSurfaceData.isNull() ) + { + m_nativeMeshLinesPart = nullptr; + return; + } const std::vector& vertices = m_usedSurfaceData->vertices(); if ( vertices.empty() ) return; diff --git a/ApplicationLibCode/ProjectDataModel/Surfaces/RimFractureSurface.cpp b/ApplicationLibCode/ProjectDataModel/Surfaces/RimFractureSurface.cpp index 0001c08b29..d1b432a5d6 100644 --- a/ApplicationLibCode/ProjectDataModel/Surfaces/RimFractureSurface.cpp +++ b/ApplicationLibCode/ProjectDataModel/Surfaces/RimFractureSurface.cpp @@ -18,6 +18,8 @@ #include "RimFractureSurface.h" +#include "RiaLogging.h" + #include "RigStatisticsMath.h" #include "RigSurface.h" #include "RigTriangleMeshData.h" @@ -100,7 +102,14 @@ void RimFractureSurface::loadSurfaceDataForTimeStep( int timeStep ) loadDataFromFile(); } - if ( timeStep >= static_cast( m_surfacePerTimeStep.size() ) ) return; + if ( timeStep >= static_cast( m_surfacePerTimeStep.size() ) ) + { + QString message = + QString( "Failed to load surface data for time step: %1. Available time steps: %2" ).arg( timeStep ).arg( m_surfacePerTimeStep.size() ); + RiaLogging::warning( message ); + setSurfaceData( nullptr ); + return; + } auto surface = new RigSurface; @@ -117,6 +126,14 @@ void RimFractureSurface::loadSurfaceDataForTimeStep( int timeStep ) setSurfaceData( surface ); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +size_t RimFractureSurface::timeStepCount() const +{ + return m_surfacePerTimeStep.size(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Surfaces/RimFractureSurface.h b/ApplicationLibCode/ProjectDataModel/Surfaces/RimFractureSurface.h index d8394318b9..05eff3bfa8 100644 --- a/ApplicationLibCode/ProjectDataModel/Surfaces/RimFractureSurface.h +++ b/ApplicationLibCode/ProjectDataModel/Surfaces/RimFractureSurface.h @@ -36,7 +36,8 @@ public: bool onLoadData() override; RimSurface* createCopy() override; - void loadSurfaceDataForTimeStep( int timeStep ) override; + void loadSurfaceDataForTimeStep( int timeStep ) override; + size_t timeStepCount() const override; std::vector> valuesForProperty( const QString& propertyName ) const; diff --git a/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurface.cpp b/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurface.cpp index 121315c84b..eba8c4c517 100644 --- a/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurface.cpp +++ b/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurface.cpp @@ -229,6 +229,14 @@ void RimSurface::loadSurfaceDataForTimeStep( int timeStep ) { } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +size_t RimSurface::timeStepCount() const +{ + return 1; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurface.h b/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurface.h index 7f3393ab0e..df5c1d9b05 100644 --- a/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurface.h +++ b/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurface.h @@ -61,7 +61,9 @@ public: QString userDescription(); void setUserDescription( const QString& description ); - virtual void loadSurfaceDataForTimeStep( int timeStep ); + virtual void loadSurfaceDataForTimeStep( int timeStep ); + virtual size_t timeStepCount() const; + virtual QString fullName() const; virtual bool onLoadData() = 0; virtual RimSurface* createCopy() = 0; diff --git a/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurfaceInView.cpp b/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurfaceInView.cpp index eebb4faab8..ac63bf368e 100644 --- a/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurfaceInView.cpp +++ b/ApplicationLibCode/ProjectDataModel/Surfaces/RimSurfaceInView.cpp @@ -18,6 +18,8 @@ #include "RimSurfaceInView.h" +#include "RiaLogging.h" + #include "RigSurface.h" #include "RimEclipseView.h" @@ -188,6 +190,18 @@ void RimSurfaceInView::loadDataAndUpdate( int timeStep ) surface()->loadDataIfRequired(); surface()->loadSurfaceDataForTimeStep( timeStep ); + if ( surface()->surfaceData() ) + { + auto ownerView = firstAncestorOrThisOfTypeAsserted(); + if ( ownerView->timeStepCount() != surface()->timeStepCount() ) + { + QString message = QString( "Surface has different number of time steps. Expected %1, but found %2." ) + .arg( ownerView->timeStepCount() ) + .arg( surface()->timeStepCount() ); + RiaLogging::warning( message ); + } + } + if ( surface()->surfaceData() && surface()->surfaceData()->propertyNames().empty() ) { m_resultDefinition.uiCapability()->setUiTreeChildrenHidden( true );