#5607 Saturation Pressure Plots : Add workaround for multi plot of SatNumPlots

This commit is contained in:
Magne Sjaastad
2020-03-19 15:19:25 +01:00
parent 9ef51a5e98
commit a828ccdfe4
5 changed files with 58 additions and 0 deletions

View File

@@ -26,6 +26,7 @@
#include "RimMultiPlotCollection.h"
#include "RimPlot.h"
#include "RimProject.h"
#include "RimSaturationPressurePlot.h"
#include "RiuPlotMainWindowTools.h"
#include <QAction>
@@ -68,6 +69,21 @@ caf::PdmScriptResponse RicNewMultiPlotFeature::execute()
for ( auto plot : plots )
{
auto copy = dynamic_cast<RimPlot*>( plot->copyByXmlSerialization( caf::PdmDefaultObjectFactory::instance() ) );
{
// TODO: Workaround for fixing the PdmPointer in RimEclipseResultDefinition
// caf::PdmPointer<RimEclipseCase> m_eclipseCase;
// This pdmpointer must be changed to a ptrField
auto saturationPressurePlotOriginal = dynamic_cast<RimSaturationPressurePlot*>( plot );
auto saturationPressurePlotCopy = dynamic_cast<RimSaturationPressurePlot*>( copy );
if ( saturationPressurePlotCopy && saturationPressurePlotOriginal )
{
RimSaturationPressurePlot::fixPointersAfterCopy( saturationPressurePlotOriginal,
saturationPressurePlotCopy );
}
}
plotWindow->addPlot( copy );
copy->resolveReferencesRecursively();

View File

@@ -74,6 +74,19 @@ void RimPlotCellPropertyFilter::setValueRange( double lowerBound, double upperBo
m_upperBound = upperBound;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimPlotCellPropertyFilter::updatePointerAfterCopy( RimPlotCellPropertyFilter* other )
{
if ( eclipseResultDefinition() && eclipseResultDefinition()->eclipseCase() )
{
auto eclipseCase = eclipseResultDefinition()->eclipseCase();
other->eclipseResultDefinition()->setEclipseCase( eclipseCase );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -43,6 +43,8 @@ public:
void setValueRange( double lowerBound, double upperBound );
void updatePointerAfterCopy( RimPlotCellPropertyFilter* other );
protected:
void updateCellVisibilityFromFilter( size_t timeStepIndex, cvf::UByteArray* visibleCells ) override;
void defineEditorAttribute( const caf::PdmFieldHandle* field,

View File

@@ -190,6 +190,31 @@ void RimSaturationPressurePlot::assignCaseAndEquilibriumRegion( RiaDefines::Poro
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSaturationPressurePlot::fixPointersAfterCopy( RimSaturationPressurePlot* source, RimSaturationPressurePlot* copy )
{
CAF_ASSERT( source && copy );
std::vector<RimPlotCellPropertyFilter*> sourceFilters;
source->descendantsIncludingThisOfType( sourceFilters );
std::vector<RimPlotCellPropertyFilter*> copyFilters;
copy->descendantsIncludingThisOfType( copyFilters );
if ( !sourceFilters.empty() && ( sourceFilters.size() == copyFilters.size() ) )
{
for ( size_t i = 0; i < sourceFilters.size(); i++ )
{
auto sourceFilter = sourceFilters[i];
auto copyFilter = copyFilters[i];
sourceFilter->updatePointerAfterCopy( copyFilter );
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -40,6 +40,8 @@ public:
int zeroBasedEquilRegionIndex,
int timeStep );
static void fixPointersAfterCopy( RimSaturationPressurePlot* source, RimSaturationPressurePlot* copy );
protected:
void initAfterRead() override;
QString xAxisParameterString() const override;