diff --git a/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.cpp b/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.cpp index c738d8da65..c39cd23da0 100644 --- a/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.cpp +++ b/ApplicationLibCode/ProjectDataModel/RimMainPlotCollection.cpp @@ -196,34 +196,31 @@ void RimMainPlotCollection::initAfterRead() // Move cross plots into summary plot collection auto crossPlots = m_summaryCrossPlotCollection_OBSOLETE->plots(); - if ( !crossPlots.empty() ) + for ( auto crossPlot : crossPlots ) { + m_summaryCrossPlotCollection_OBSOLETE->removePlot( crossPlot ); + auto* summaryMultiPlot = new RimSummaryMultiPlot; summaryMultiPlot->setMultiPlotTitle( QString( "Multi Plot %1" ).arg( m_summaryMultiPlotCollection->multiPlots().size() + 1 ) ); summaryMultiPlot->setAsPlotMdiWindow(); m_summaryMultiPlotCollection->addSummaryMultiPlot( summaryMultiPlot ); - for ( auto crossPlot : crossPlots ) - { - m_summaryCrossPlotCollection_OBSOLETE->removePlot( crossPlot ); - summaryMultiPlot->addPlot( crossPlot ); - - // We want to convert RimSummaryCrossPlot into a RimSummaryPlot. The cross plot is derived from RimSummaryPlot, but we need to - // create a new RimSummaryPlot to be able to store the PDM object as a RimSummaryPlot instead of RimSummaryCrossPlot - auto summaryPlot = new RimSummaryPlot; - summaryMultiPlot->addPlot( summaryPlot ); - - for ( auto curve : crossPlot->allCurves( RimSummaryDataSourceStepping::Axis::Y_AXIS ) ) - { - crossPlot->removeCurve( curve ); + // We want to convert RimSummaryCrossPlot into a RimSummaryPlot. The cross plot is derived from RimSummaryPlot, but we need to + // create a new RimSummaryPlot to be able to store the PDM object as a RimSummaryPlot instead of RimSummaryCrossPlot + auto summaryPlot = new RimSummaryPlot; + summaryMultiPlot->addPlot( summaryPlot ); - if ( curve->summaryCaseX() != nullptr ) curve->setAxisTypeX( RiaDefines::HorizontalAxisType::SUMMARY_VECTOR ); + for ( auto curve : crossPlot->allCurves( RimSummaryDataSourceStepping::Axis::Y_AXIS ) ) + { + crossPlot->removeCurve( curve ); - summaryPlot->insertCurve( curve, std::numeric_limits::max() ); - } + if ( curve->summaryCaseX() != nullptr ) curve->setAxisTypeX( RiaDefines::HorizontalAxisType::SUMMARY_VECTOR ); - delete crossPlot; + summaryPlot->insertCurve( curve, std::numeric_limits::max() ); + summaryPlot->findOrAssignPlotAxisX( curve ); } + + delete crossPlot; } } diff --git a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp index f7328aa823..66dfb20a8a 100644 --- a/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp +++ b/ApplicationLibCode/ProjectDataModel/Summary/RimSummaryPlot.cpp @@ -644,7 +644,11 @@ void RimSummaryPlot::copyAxisPropertiesFromOther( RiaDefines::PlotAxis plotAxisT QString data = ap->writeObjectToXmlString(); - axisPropertiesForPlotAxis( ap->plotAxis() )->readObjectFromXmlString( data, caf::PdmDefaultObjectFactory::instance() ); + auto axisProperty = axisPropertiesForPlotAxis( ap->plotAxis() ); + if ( axisProperty ) + { + axisProperty->readObjectFromXmlString( data, caf::PdmDefaultObjectFactory::instance() ); + } } } @@ -1237,20 +1241,39 @@ void RimSummaryPlot::findOrAssignPlotAxisX( RimSummaryCurve* curve ) } } - if ( curve->summaryCaseX() != nullptr && plotWidget() && plotWidget()->isMultiAxisSupported() ) + if ( curve->summaryCaseX() != nullptr ) { - QString axisObjectName = "New Axis"; - if ( !curve->summaryAddressX().uiText().empty() ) axisObjectName = QString::fromStdString( curve->summaryAddressX().uiText() ); - - RiuPlotAxis newPlotAxis = plotWidget()->createNextPlotAxis( RiaDefines::PlotAxis::PLOT_AXIS_BOTTOM ); - addNewAxisProperties( newPlotAxis, axisObjectName ); - if ( plotWidget() ) + if ( !plotWidget() ) { - plotWidget()->ensureAxisIsCreated( newPlotAxis ); + // Assign a default bottom axis if no plot widget is present. This can happens during project load and transformation to new + // cross plot structure in RimMainPlotCollection::initAfterRead() + + QString axisObjectName = "New Axis"; + if ( !curve->summaryAddressX().uiText().empty() ) axisObjectName = QString::fromStdString( curve->summaryAddressX().uiText() ); + + RiuPlotAxis newPlotAxis = RiuPlotAxis::defaultBottomForSummaryVectors(); + addNewAxisProperties( newPlotAxis, axisObjectName ); + + curve->setTopOrBottomAxisX( newPlotAxis ); + + return; } - updateAxes(); - curve->setTopOrBottomAxisX( newPlotAxis ); + if ( plotWidget()->isMultiAxisSupported() ) + { + QString axisObjectName = "New Axis"; + if ( !curve->summaryAddressX().uiText().empty() ) axisObjectName = QString::fromStdString( curve->summaryAddressX().uiText() ); + + RiuPlotAxis newPlotAxis = plotWidget()->createNextPlotAxis( RiaDefines::PlotAxis::PLOT_AXIS_BOTTOM ); + addNewAxisProperties( newPlotAxis, axisObjectName ); + if ( plotWidget() ) + { + plotWidget()->ensureAxisIsCreated( newPlotAxis ); + } + + updateAxes(); + curve->setTopOrBottomAxisX( newPlotAxis ); + } } }