From 2bb93ef8722e290f4f4524a0114130e30d26f886 Mon Sep 17 00:00:00 2001 From: Gaute Lindkvist Date: Fri, 7 Feb 2020 13:00:48 +0100 Subject: [PATCH] #5389 Delete empty measurement curves after deleting or changing measurements. --- ...icDeleteWellMeasurementFilePathFeature.cpp | 2 +- .../RicReloadWellMeasurementsFeature.cpp | 1 + .../RicWellMeasurementImportTools.cpp | 15 ++++++ .../Commands/RicWellMeasurementImportTools.h | 1 + .../RicWellLogPlotTrackFeatureImpl.cpp | 2 +- .../ProjectDataModel/Flow/RimWellRftPlot.cpp | 2 +- .../ProjectDataModel/RimWellLogTrack.cpp | 10 +++- .../ProjectDataModel/RimWellLogTrack.h | 3 +- .../ProjectDataModel/RimWellMeasurement.cpp | 2 +- .../RimWellMeasurementCollection.cpp | 53 +++++++++++++------ .../RimWellMeasurementCollection.h | 3 +- 11 files changed, 72 insertions(+), 22 deletions(-) diff --git a/ApplicationCode/Commands/RicDeleteWellMeasurementFilePathFeature.cpp b/ApplicationCode/Commands/RicDeleteWellMeasurementFilePathFeature.cpp index 131ef66b46..429e3ff15d 100644 --- a/ApplicationCode/Commands/RicDeleteWellMeasurementFilePathFeature.cpp +++ b/ApplicationCode/Commands/RicDeleteWellMeasurementFilePathFeature.cpp @@ -54,7 +54,7 @@ void RicDeleteWellMeasurementFilePathFeature::onActionTriggered( bool isChecked wellMeasurementCollection->removeMeasurementsForFilePath( filePath ); wellMeasurementCollection->removeFilePath( filePath ); - + wellMeasurementCollection->deleteAllEmptyCurves(); wellMeasurementCollection->uiCapability()->updateConnectedEditors(); } diff --git a/ApplicationCode/Commands/RicReloadWellMeasurementsFeature.cpp b/ApplicationCode/Commands/RicReloadWellMeasurementsFeature.cpp index c538c6d21e..f86157b0ff 100644 --- a/ApplicationCode/Commands/RicReloadWellMeasurementsFeature.cpp +++ b/ApplicationCode/Commands/RicReloadWellMeasurementsFeature.cpp @@ -53,6 +53,7 @@ void RicReloadWellMeasurementsFeature::onActionTriggered( bool isChecked ) RicWellMeasurementImportTools::removeWellMeasurementsFromFiles( filePaths ); RicWellMeasurementImportTools::importWellMeasurementsFromFiles( filePaths ); + RicWellMeasurementImportTools::deleteAllEmptyMeasurementCurves(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/Commands/RicWellMeasurementImportTools.cpp b/ApplicationCode/Commands/RicWellMeasurementImportTools.cpp index ff89a77023..ccf1b96f5b 100644 --- a/ApplicationCode/Commands/RicWellMeasurementImportTools.cpp +++ b/ApplicationCode/Commands/RicWellMeasurementImportTools.cpp @@ -141,6 +141,21 @@ void RicWellMeasurementImportTools::removeWellMeasurementsFromFiles( const std:: } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicWellMeasurementImportTools::deleteAllEmptyMeasurementCurves() +{ + RiaApplication* app = RiaApplication::instance(); + + std::vector measurementCollections; + app->project()->descendantsIncludingThisOfType( measurementCollections ); + for ( auto measurementCollection : measurementCollections ) + { + measurementCollection->deleteAllEmptyCurves(); + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/Commands/RicWellMeasurementImportTools.h b/ApplicationCode/Commands/RicWellMeasurementImportTools.h index f4337eeb50..8e5e45b844 100644 --- a/ApplicationCode/Commands/RicWellMeasurementImportTools.h +++ b/ApplicationCode/Commands/RicWellMeasurementImportTools.h @@ -33,6 +33,7 @@ class RicWellMeasurementImportTools public: static void importWellMeasurementsFromFiles( const std::vector& filePaths ); static void removeWellMeasurementsFromFiles( const std::vector& filePaths ); + static void deleteAllEmptyMeasurementCurves(); static void importWellMeasurementsFromFiles( const QStringList& filePaths, RimWellPathCollection* wellPathCollection ); diff --git a/ApplicationCode/Commands/WellLogCommands/RicWellLogPlotTrackFeatureImpl.cpp b/ApplicationCode/Commands/WellLogCommands/RicWellLogPlotTrackFeatureImpl.cpp index c0879d65fe..bbfcefeb77 100644 --- a/ApplicationCode/Commands/WellLogCommands/RicWellLogPlotTrackFeatureImpl.cpp +++ b/ApplicationCode/Commands/WellLogCommands/RicWellLogPlotTrackFeatureImpl.cpp @@ -54,7 +54,7 @@ void RicWellLogPlotTrackFeatureImpl::moveCurvesToWellLogPlotTrack( RimWellLogTra curve->firstAncestorOrThisOfType( wellLogPlotTrack ); if ( wellLogPlotTrack ) { - wellLogPlotTrack->takeOutCurve( curve ); + wellLogPlotTrack->removeCurve( curve ); wellLogPlotTrack->updateConnectedEditors(); srcTracks.insert( wellLogPlotTrack ); RimWellLogPlot* plot; diff --git a/ApplicationCode/ProjectDataModel/Flow/RimWellRftPlot.cpp b/ApplicationCode/ProjectDataModel/Flow/RimWellRftPlot.cpp index e41edf8b08..4ae81c88bc 100644 --- a/ApplicationCode/ProjectDataModel/Flow/RimWellRftPlot.cpp +++ b/ApplicationCode/ProjectDataModel/Flow/RimWellRftPlot.cpp @@ -734,7 +734,7 @@ void RimWellRftPlot::deleteCurvesAssosicatedWithObservedData( const RimObservedF RimWellLogRftCurve* rftCurve = dynamic_cast( curve ); if ( rftCurve && rftCurve->observedFmuRftData() == observedFmuRftData ) { - track->takeOutCurve( rftCurve ); + track->removeCurve( rftCurve ); delete rftCurve; } } diff --git a/ApplicationCode/ProjectDataModel/RimWellLogTrack.cpp b/ApplicationCode/ProjectDataModel/RimWellLogTrack.cpp index 2b10b149ee..84c4e89d11 100644 --- a/ApplicationCode/ProjectDataModel/RimWellLogTrack.cpp +++ b/ApplicationCode/ProjectDataModel/RimWellLogTrack.cpp @@ -1026,7 +1026,7 @@ void RimWellLogTrack::insertCurve( RimWellLogCurve* curve, size_t index ) //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimWellLogTrack::takeOutCurve( RimWellLogCurve* curve ) +void RimWellLogTrack::removeCurve( RimWellLogCurve* curve ) { size_t index = m_curves.index( curve ); if ( index < m_curves.size() ) @@ -2584,3 +2584,11 @@ void RimWellLogTrack::removeRegionAnnotations() m_annotationTool->detachAllAnnotations(); } } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimWellLogTrack::doUpdateLayout() +{ + m_plotWidget->scheduleReplot(); +} diff --git a/ApplicationCode/ProjectDataModel/RimWellLogTrack.h b/ApplicationCode/ProjectDataModel/RimWellLogTrack.h index f7c2f4c288..c60ea83a52 100644 --- a/ApplicationCode/ProjectDataModel/RimWellLogTrack.h +++ b/ApplicationCode/ProjectDataModel/RimWellLogTrack.h @@ -103,7 +103,7 @@ public: void addCurve( RimWellLogCurve* curve ); void insertCurve( RimWellLogCurve* curve, size_t index ); - void takeOutCurve( RimWellLogCurve* curve ); + void removeCurve( RimWellLogCurve* curve ); void deleteAllCurves(); size_t curveIndex( RimWellLogCurve* curve ); @@ -281,6 +281,7 @@ private: RimWellLogPlot* parentWellLogPlot() const; void handleWheelEvent( QWheelEvent* event ) override; + void doUpdateLayout() override; std::vector> waterAndRockRegions( RiaDefines::DepthTypeEnum depthType, const RigWellLogExtractor* extractor ) const; diff --git a/ApplicationCode/ProjectDataModel/RimWellMeasurement.cpp b/ApplicationCode/ProjectDataModel/RimWellMeasurement.cpp index 7f5875a904..60c0e75083 100644 --- a/ApplicationCode/ProjectDataModel/RimWellMeasurement.cpp +++ b/ApplicationCode/ProjectDataModel/RimWellMeasurement.cpp @@ -187,7 +187,7 @@ void RimWellMeasurement::fieldChangedByUi( const caf::PdmFieldHandle* changedFie RimWellMeasurementCollection* wellMeasurementCollection; this->firstAncestorOrThisOfTypeAsserted( wellMeasurementCollection ); - wellMeasurementCollection->updateAllReferringTracksAndCurves(); + wellMeasurementCollection->updateAllCurves(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimWellMeasurementCollection.cpp b/ApplicationCode/ProjectDataModel/RimWellMeasurementCollection.cpp index 3dcb48c2ba..d526547097 100644 --- a/ApplicationCode/ProjectDataModel/RimWellMeasurementCollection.cpp +++ b/ApplicationCode/ProjectDataModel/RimWellMeasurementCollection.cpp @@ -17,6 +17,8 @@ ///////////////////////////////////////////////////////////////////////////////// #include "RimWellMeasurementCollection.h" +#include "RigWellLogCurveData.h" + #include "RimMainPlotCollection.h" #include "RimProject.h" #include "RimWellLogTrack.h" @@ -54,27 +56,48 @@ RimWellMeasurementCollection::~RimWellMeasurementCollection() {} //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimWellMeasurementCollection::updateAllReferringTracksAndCurves() +void RimWellMeasurementCollection::updateAllCurves() { - std::vector wellLogTracks; - - this->objectsWithReferringPtrFieldsOfType( wellLogTracks ); - for ( RimWellLogTrack* track : wellLogTracks ) - { - track->loadDataAndUpdate(); - } - this->updateConnectedEditors(); - RimProject* proj; this->firstAncestorOrThisOfTypeAsserted( proj ); RimMainPlotCollection* plotCollection = proj->mainPlotCollection(); std::vector measurementCurves; plotCollection->descendantsIncludingThisOfType( measurementCurves ); + for ( auto curve : measurementCurves ) { curve->loadDataAndUpdate( true ); } + + this->updateConnectedEditors(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimWellMeasurementCollection::deleteAllEmptyCurves() +{ + RimProject* proj; + this->firstAncestorOrThisOfTypeAsserted( proj ); + RimMainPlotCollection* plotCollection = proj->mainPlotCollection(); + + std::vector measurementCurves; + plotCollection->descendantsIncludingThisOfType( measurementCurves ); + + for ( auto curve : measurementCurves ) + { + if ( curve->curveData()->xValues().empty() ) + { + RimWellLogTrack* track = nullptr; + curve->firstAncestorOrThisOfTypeAsserted( track ); + + track->removeCurve( curve ); + delete curve; + curve = nullptr; + track->updateLayout(); + } + } } //-------------------------------------------------------------------------------------------------- @@ -111,7 +134,7 @@ void RimWellMeasurementCollection::insertMeasurement( RimWellMeasurement* insert m_measurements.push_back( measurement ); addFilePath( measurement->filePath() ); - this->updateAllReferringTracksAndCurves(); + this->updateAllCurves(); } //-------------------------------------------------------------------------------------------------- @@ -121,7 +144,7 @@ void RimWellMeasurementCollection::appendMeasurement( RimWellMeasurement* measur { m_measurements.push_back( measurement ); addFilePath( measurement->filePath() ); - this->updateAllReferringTracksAndCurves(); + this->updateAllCurves(); } //-------------------------------------------------------------------------------------------------- @@ -132,7 +155,7 @@ void RimWellMeasurementCollection::deleteMeasurement( RimWellMeasurement* measur m_measurements.removeChildObject( measurementToDelete ); delete measurementToDelete; - this->updateAllReferringTracksAndCurves(); + this->updateAllCurves(); } //-------------------------------------------------------------------------------------------------- @@ -141,7 +164,7 @@ void RimWellMeasurementCollection::deleteMeasurement( RimWellMeasurement* measur void RimWellMeasurementCollection::deleteAllMeasurements() { m_measurements.deleteAllChildObjects(); - this->updateAllReferringTracksAndCurves(); + this->updateAllCurves(); } //-------------------------------------------------------------------------------------------------- @@ -247,5 +270,5 @@ void RimWellMeasurementCollection::removeMeasurementsForFilePath( RimWellMeasure RimProject* proj; this->firstAncestorOrThisOfTypeAsserted( proj ); proj->scheduleCreateDisplayModelAndRedrawAllViews(); - this->updateAllReferringTracksAndCurves(); + this->updateAllCurves(); } diff --git a/ApplicationCode/ProjectDataModel/RimWellMeasurementCollection.h b/ApplicationCode/ProjectDataModel/RimWellMeasurementCollection.h index 390f35805a..d3b294a7cf 100644 --- a/ApplicationCode/ProjectDataModel/RimWellMeasurementCollection.h +++ b/ApplicationCode/ProjectDataModel/RimWellMeasurementCollection.h @@ -38,7 +38,8 @@ public: std::vector measurements() const; - void updateAllReferringTracksAndCurves(); + void updateAllCurves(); + void deleteAllEmptyCurves(); void insertMeasurement( RimWellMeasurement* insertBefore, RimWellMeasurement* measurement ); void appendMeasurement( RimWellMeasurement* measurement ); void deleteMeasurement( RimWellMeasurement* measurementToDelete );