mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Several RFT plot adjustments
* #9923 Call loadDataAndUpdate() after visibility of curves is updated This will ensure that all zoom ranges are recalculated based on visible curves. * #9923 Put new segment plots in RFT Plot collection * #9923 Add "Create Rft Sement Plot" to RFT plot collection * #9923 Make sure the main window is displayed when required Make sure the main window is opened and views updated when a grid model is opened from a summary case. * #9923 Make sure fieldChanged is triggered when required Exclude field having the target state. If these fields are included, the one and only call to setValueWithFieldChanged() can contain a field with the target state value. When setting a value to a field with the same value, nothing happens and the UI will get an inconsistent state (some curves toggled off are still visible in a plot).
This commit is contained in:
@@ -20,6 +20,10 @@
|
|||||||
|
|
||||||
#include "RiaGuiApplication.h"
|
#include "RiaGuiApplication.h"
|
||||||
|
|
||||||
|
#include "Rim3dView.h"
|
||||||
|
#include "RimCase.h"
|
||||||
|
#include "RimProject.h"
|
||||||
|
|
||||||
#include "RiuMainWindow.h"
|
#include "RiuMainWindow.h"
|
||||||
|
|
||||||
#include <QAction>
|
#include <QAction>
|
||||||
@@ -51,6 +55,23 @@ void RicShowMainWindowFeature::showMainWindow()
|
|||||||
{
|
{
|
||||||
RiaGuiApplication* app = RiaGuiApplication::instance();
|
RiaGuiApplication* app = RiaGuiApplication::instance();
|
||||||
app->getOrCreateAndShowMainWindow();
|
app->getOrCreateAndShowMainWindow();
|
||||||
|
|
||||||
|
// When the main window is created, make sure all the views are loaded and displayed
|
||||||
|
|
||||||
|
std::vector<RimCase*> allGridModels;
|
||||||
|
RimProject::current()->allCases( allGridModels );
|
||||||
|
|
||||||
|
for ( RimCase* gridModel : allGridModels )
|
||||||
|
{
|
||||||
|
if ( gridModel )
|
||||||
|
{
|
||||||
|
std::vector<Rim3dView*> views = gridModel->views();
|
||||||
|
for ( Rim3dView* view : views )
|
||||||
|
{
|
||||||
|
if ( view ) view->loadDataAndUpdate();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,8 @@
|
|||||||
|
|
||||||
#include "RicImportGridModelFromSummaryCaseFeature.h"
|
#include "RicImportGridModelFromSummaryCaseFeature.h"
|
||||||
|
|
||||||
|
#include "ApplicationCommands/RicShowMainWindowFeature.h"
|
||||||
|
|
||||||
#include "RiaEclipseFileNameTools.h"
|
#include "RiaEclipseFileNameTools.h"
|
||||||
#include "RiaImportEclipseCaseTools.h"
|
#include "RiaImportEclipseCaseTools.h"
|
||||||
#include "RiaLogging.h"
|
#include "RiaLogging.h"
|
||||||
@@ -125,6 +127,8 @@ bool RicImportGridModelFromSummaryCaseFeature::findAndActivateFirstView( const R
|
|||||||
{
|
{
|
||||||
if ( !gridCase->gridViews().empty() )
|
if ( !gridCase->gridViews().empty() )
|
||||||
{
|
{
|
||||||
|
RicShowMainWindowFeature::showMainWindow();
|
||||||
|
|
||||||
Riu3DMainWindowTools::selectAsCurrentItem( gridCase->gridViews().front() );
|
Riu3DMainWindowTools::selectAsCurrentItem( gridCase->gridViews().front() );
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -99,11 +99,36 @@ bool RicToggleItemsFeatureImpl::isToggleCommandsForSubItems()
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RicToggleItemsFeatureImpl::setObjectToggleStateForSelection( SelectionToggleType state )
|
void RicToggleItemsFeatureImpl::setObjectToggleStateForSelection( SelectionToggleType state )
|
||||||
{
|
{
|
||||||
auto fields = findToggleFieldsFromSelection( state );
|
auto selectedFields = findToggleFieldsFromSelection( state );
|
||||||
if ( fields.empty() ) return;
|
|
||||||
|
|
||||||
auto lastField = fields.back();
|
std::vector<caf::PdmField<bool>*> fieldsToUpdate;
|
||||||
for ( auto field : fields )
|
if ( state == TOGGLE_OFF || state == TOGGLE_ON )
|
||||||
|
{
|
||||||
|
// Exclude field having the target state. If these fields are included, the one and only call to setValueWithFieldChanged() can
|
||||||
|
// contain a field with the target state value. When setting a value to a field with the same value, nothing happens and the UI will
|
||||||
|
// get an inconsistent state (some curves toggled off are still visible in a plot).
|
||||||
|
|
||||||
|
const bool targetState = ( state == TOGGLE_ON ) ? true : false;
|
||||||
|
|
||||||
|
for ( const auto& field : selectedFields )
|
||||||
|
{
|
||||||
|
bool currentValue = field->v();
|
||||||
|
if ( currentValue != targetState )
|
||||||
|
{
|
||||||
|
fieldsToUpdate.push_back( field );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// All fields will be updated when toggling
|
||||||
|
fieldsToUpdate = selectedFields;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( fieldsToUpdate.empty() ) return;
|
||||||
|
|
||||||
|
auto lastField = fieldsToUpdate.back();
|
||||||
|
for ( auto field : fieldsToUpdate )
|
||||||
{
|
{
|
||||||
bool value = !( field->v() );
|
bool value = !( field->v() );
|
||||||
|
|
||||||
|
|||||||
@@ -58,11 +58,7 @@ bool RicNewMultiPhaseRftSegmentPlotFeature::isCommandEnabled()
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RicNewMultiPhaseRftSegmentPlotFeature::onActionTriggered( bool isChecked )
|
void RicNewMultiPhaseRftSegmentPlotFeature::onActionTriggered( bool isChecked )
|
||||||
{
|
{
|
||||||
auto rftCase = caf::SelectionManager::instance()->selectedItemOfType<RimRftCase>();
|
RimSummaryCase* summaryCase = RicNewRftSegmentWellLogPlotFeature::getSelectedOrFirstRftCase();
|
||||||
if ( !rftCase ) return;
|
|
||||||
|
|
||||||
RimSummaryCase* summaryCase = nullptr;
|
|
||||||
rftCase->firstAncestorOfType( summaryCase );
|
|
||||||
if ( !summaryCase ) return;
|
if ( !summaryCase ) return;
|
||||||
|
|
||||||
auto rftReader = summaryCase->rftReader();
|
auto rftReader = summaryCase->rftReader();
|
||||||
@@ -72,7 +68,7 @@ void RicNewMultiPhaseRftSegmentPlotFeature::onActionTriggered( bool isChecked )
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto plot = RicNewWellLogPlotFeatureImpl::createHorizontalWellLogPlot();
|
auto plot = RicNewWellLogPlotFeatureImpl::createRftSegmentPlot();
|
||||||
|
|
||||||
QString wellName = "Unknown";
|
QString wellName = "Unknown";
|
||||||
|
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
#include "RiaLogging.h"
|
#include "RiaLogging.h"
|
||||||
#include "RiaPlotWindowRedrawScheduler.h"
|
#include "RiaPlotWindowRedrawScheduler.h"
|
||||||
#include "RiaRftDefines.h"
|
#include "RiaRftDefines.h"
|
||||||
|
#include "RiaSummaryTools.h"
|
||||||
|
|
||||||
#include "RifReaderOpmRft.h"
|
#include "RifReaderOpmRft.h"
|
||||||
|
|
||||||
@@ -58,11 +59,7 @@ bool RicNewRftSegmentWellLogPlotFeature::isCommandEnabled()
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RicNewRftSegmentWellLogPlotFeature::onActionTriggered( bool isChecked )
|
void RicNewRftSegmentWellLogPlotFeature::onActionTriggered( bool isChecked )
|
||||||
{
|
{
|
||||||
auto rftCase = caf::SelectionManager::instance()->selectedItemOfType<RimRftCase>();
|
RimSummaryCase* summaryCase = RicNewRftSegmentWellLogPlotFeature::getSelectedOrFirstRftCase();
|
||||||
if ( !rftCase ) return;
|
|
||||||
|
|
||||||
RimSummaryCase* summaryCase = nullptr;
|
|
||||||
rftCase->firstAncestorOfType( summaryCase );
|
|
||||||
if ( !summaryCase ) return;
|
if ( !summaryCase ) return;
|
||||||
|
|
||||||
auto rftReader = summaryCase->rftReader();
|
auto rftReader = summaryCase->rftReader();
|
||||||
@@ -72,7 +69,7 @@ void RicNewRftSegmentWellLogPlotFeature::onActionTriggered( bool isChecked )
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
auto plot = RicNewWellLogPlotFeatureImpl::createHorizontalWellLogPlot();
|
auto plot = RicNewWellLogPlotFeatureImpl::createRftSegmentPlot();
|
||||||
|
|
||||||
QString wellName = "Unknown";
|
QString wellName = "Unknown";
|
||||||
auto wellNames = rftReader->wellNames();
|
auto wellNames = rftReader->wellNames();
|
||||||
@@ -293,6 +290,31 @@ void RicNewRftSegmentWellLogPlotFeature::appendConnectionFactorTrack( RimWellLog
|
|||||||
curve->setFillStyle( Qt::SolidPattern );
|
curve->setFillStyle( Qt::SolidPattern );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
RimSummaryCase* RicNewRftSegmentWellLogPlotFeature::getSelectedOrFirstRftCase()
|
||||||
|
{
|
||||||
|
auto rftCase = caf::SelectionManager::instance()->selectedItemOfType<RimRftCase>();
|
||||||
|
if ( rftCase )
|
||||||
|
{
|
||||||
|
RimSummaryCase* summaryCase = nullptr;
|
||||||
|
rftCase->firstAncestorOfType( summaryCase );
|
||||||
|
if ( summaryCase ) return summaryCase;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto summaryCases = RiaSummaryTools::singleTopLevelSummaryCases();
|
||||||
|
for ( const auto& candidateCase : summaryCases )
|
||||||
|
{
|
||||||
|
if ( candidateCase && candidateCase->rftReader() )
|
||||||
|
{
|
||||||
|
return candidateCase;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -40,6 +40,8 @@ public:
|
|||||||
static void appendPressureTrack( RimWellLogPlot* plot, const QString& wellName, RimSummaryCase* summaryCase );
|
static void appendPressureTrack( RimWellLogPlot* plot, const QString& wellName, RimSummaryCase* summaryCase );
|
||||||
static void appendConnectionFactorTrack( RimWellLogPlot* plot, const QString& wellName, RimSummaryCase* summaryCase );
|
static void appendConnectionFactorTrack( RimWellLogPlot* plot, const QString& wellName, RimSummaryCase* summaryCase );
|
||||||
|
|
||||||
|
static RimSummaryCase* getSelectedOrFirstRftCase();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
bool isCommandEnabled() override;
|
bool isCommandEnabled() override;
|
||||||
void onActionTriggered( bool isChecked ) override;
|
void onActionTriggered( bool isChecked ) override;
|
||||||
|
|||||||
@@ -23,6 +23,7 @@
|
|||||||
#include "RimEclipseCase.h"
|
#include "RimEclipseCase.h"
|
||||||
#include "RimMainPlotCollection.h"
|
#include "RimMainPlotCollection.h"
|
||||||
#include "RimProject.h"
|
#include "RimProject.h"
|
||||||
|
#include "RimRftPlotCollection.h"
|
||||||
#include "RimStimPlanModelPlot.h"
|
#include "RimStimPlanModelPlot.h"
|
||||||
#include "RimStimPlanModelPlotCollection.h"
|
#include "RimStimPlanModelPlotCollection.h"
|
||||||
#include "RimWellBoreStabilityPlot.h"
|
#include "RimWellBoreStabilityPlot.h"
|
||||||
@@ -84,9 +85,22 @@ RimWellBoreStabilityPlot* RicNewWellLogPlotFeatureImpl::createWellBoreStabilityP
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
RimWellLogPlot* RicNewWellLogPlotFeatureImpl::createHorizontalWellLogPlot()
|
RimWellLogPlot* RicNewWellLogPlotFeatureImpl::createRftSegmentPlot()
|
||||||
{
|
{
|
||||||
auto plot = createWellLogPlot();
|
auto rftPlotCollection = RimMainPlotCollection::current()->rftPlotCollection();
|
||||||
|
CVF_ASSERT( rftPlotCollection );
|
||||||
|
|
||||||
|
// Make sure the summary plot window is created
|
||||||
|
RiaGuiApplication::instance()->getOrCreateMainPlotWindow();
|
||||||
|
|
||||||
|
RimWellLogPlot* plot = new RimWellLogPlot();
|
||||||
|
plot->setAsPlotMdiWindow();
|
||||||
|
|
||||||
|
rftPlotCollection->addPlot( plot );
|
||||||
|
|
||||||
|
plot->nameConfig()->setCustomName( QString( "RFT Segment Plot %1" ).arg( rftPlotCollection->plotCount() ) );
|
||||||
|
|
||||||
|
rftPlotCollection->updateConnectedEditors();
|
||||||
|
|
||||||
plot->setDepthOrientation( RiaDefines::Orientation::HORIZONTAL );
|
plot->setDepthOrientation( RiaDefines::Orientation::HORIZONTAL );
|
||||||
plot->setNamingMethod( RiaDefines::ObjectNamingMethod::TEMPLATE );
|
plot->setNamingMethod( RiaDefines::ObjectNamingMethod::TEMPLATE );
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ public:
|
|||||||
const QString& plotDescription = QString( "" ),
|
const QString& plotDescription = QString( "" ),
|
||||||
const RimWbsParameters* params = nullptr );
|
const RimWbsParameters* params = nullptr );
|
||||||
|
|
||||||
static RimWellLogPlot* createHorizontalWellLogPlot();
|
static RimWellLogPlot* createRftSegmentPlot();
|
||||||
static RimWellLogTrack* createWellLogTrackWithAutoUpdate();
|
static RimWellLogTrack* createWellLogTrackWithAutoUpdate();
|
||||||
|
|
||||||
static RimWellLogPlot* createWellLogPlot( bool showAfterCreation = true, const QString& plotDescription = QString( "" ) );
|
static RimWellLogPlot* createWellLogPlot( bool showAfterCreation = true, const QString& plotDescription = QString( "" ) );
|
||||||
|
|||||||
@@ -542,6 +542,8 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection()
|
|||||||
else if ( dynamic_cast<RimRftPlotCollection*>( firstUiItem ) )
|
else if ( dynamic_cast<RimRftPlotCollection*>( firstUiItem ) )
|
||||||
{
|
{
|
||||||
menuBuilder << "RicNewRftPlotFeature";
|
menuBuilder << "RicNewRftPlotFeature";
|
||||||
|
menuBuilder << "RicNewMultiPhaseRftSegmentPlotFeature";
|
||||||
|
menuBuilder << "RicNewRftSegmentWellLogPlotFeature";
|
||||||
}
|
}
|
||||||
else if ( dynamic_cast<RimPltPlotCollection*>( firstUiItem ) )
|
else if ( dynamic_cast<RimPltPlotCollection*>( firstUiItem ) )
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -204,8 +204,13 @@ const std::vector<RimWellRftPlot*> RimRftPlotCollection::rftPlots() const
|
|||||||
std::vector<RimWellRftPlot*> plots;
|
std::vector<RimWellRftPlot*> plots;
|
||||||
for ( const auto& plot : m_rftPlots )
|
for ( const auto& plot : m_rftPlots )
|
||||||
{
|
{
|
||||||
plots.push_back( plot );
|
auto wellRftPlot = dynamic_cast<RimWellRftPlot*>( plot.p() );
|
||||||
|
if ( wellRftPlot )
|
||||||
|
{
|
||||||
|
plots.push_back( wellRftPlot );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return plots;
|
return plots;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -231,7 +236,7 @@ size_t RimRftPlotCollection::plotCount() const
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RimRftPlotCollection::addPlot( gsl::not_null<RimWellRftPlot*> newPlot )
|
void RimRftPlotCollection::addPlot( gsl::not_null<RimWellLogPlot*> newPlot )
|
||||||
{
|
{
|
||||||
m_rftPlots.push_back( newPlot );
|
m_rftPlots.push_back( newPlot );
|
||||||
}
|
}
|
||||||
@@ -239,7 +244,7 @@ void RimRftPlotCollection::addPlot( gsl::not_null<RimWellRftPlot*> newPlot )
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RimRftPlotCollection::removePlot( gsl::not_null<RimWellRftPlot*> plot )
|
void RimRftPlotCollection::removePlot( gsl::not_null<RimWellLogPlot*> plot )
|
||||||
{
|
{
|
||||||
m_rftPlots.removeChild( plot );
|
m_rftPlots.removeChild( plot );
|
||||||
updateAllRequiredEditors();
|
updateAllRequiredEditors();
|
||||||
|
|||||||
@@ -66,14 +66,14 @@ public:
|
|||||||
void deleteAllExtractors();
|
void deleteAllExtractors();
|
||||||
|
|
||||||
const std::vector<RimWellRftPlot*> rftPlots() const;
|
const std::vector<RimWellRftPlot*> rftPlots() const;
|
||||||
void addPlot( gsl::not_null<RimWellRftPlot*> newPlot );
|
void addPlot( gsl::not_null<RimWellLogPlot*> newPlot );
|
||||||
void removePlot( gsl::not_null<RimWellRftPlot*> plot );
|
void removePlot( gsl::not_null<RimWellLogPlot*> plot );
|
||||||
void deleteAllPlots() override;
|
void deleteAllPlots() override;
|
||||||
void loadDataAndUpdateAllPlots() override;
|
void loadDataAndUpdateAllPlots() override;
|
||||||
size_t plotCount() const override;
|
size_t plotCount() const override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
caf::PdmChildArrayField<RimWellRftPlot*> m_rftPlots;
|
caf::PdmChildArrayField<RimWellLogPlot*> m_rftPlots;
|
||||||
cvf::Collection<RigEclipseWellLogExtractor> m_extractors;
|
cvf::Collection<RigEclipseWellLogExtractor> m_extractors;
|
||||||
cvf::Collection<RigGeoMechWellLogExtractor> m_geomExtractors;
|
cvf::Collection<RigGeoMechWellLogExtractor> m_geomExtractors;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -712,10 +712,16 @@ void RimWellLogCurveCommonDataSource::applyDataSourceChanges()
|
|||||||
|
|
||||||
this->applyDataSourceChanges( curves, tracks );
|
this->applyDataSourceChanges( curves, tracks );
|
||||||
|
|
||||||
|
// plot->loadDataAndUpdate() has been called in applyDataSourceChanges(), and this is required before the visibility of tracks and
|
||||||
|
// curves can be updated. However, if the visibility of curves changes, another loadDataAndUpdate() is required to calculate zoom
|
||||||
|
// based on visible curves.
|
||||||
|
|
||||||
for ( auto& track : tracks )
|
for ( auto& track : tracks )
|
||||||
{
|
{
|
||||||
track->updateCheckStateBasedOnCurveData();
|
track->updateCheckStateBasedOnCurveData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
parentPlot->loadDataAndUpdate();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user