#8768 Multi Plot: Add option to sync all sub plots axis properties.

This commit is contained in:
Kristian Bendiksen 2022-04-04 15:10:39 +02:00
parent ca7a5d7b40
commit 45d28de6d3
4 changed files with 49 additions and 1 deletions

View File

@ -74,6 +74,8 @@ RimSummaryMultiPlot::RimSummaryMultiPlot()
m_disableWheelZoom.uiCapability()->setUiEditorTypeName( caf::PdmUiPushButtonEditor::uiEditorTypeName() );
m_disableWheelZoom.uiCapability()->setUiIconFromResourceString( ":/DisableZoom.png" );
CAF_PDM_InitField( &m_syncSubPlotAxes, "SyncSubPlotAxes", false, "Sync Subplot Axes" );
CAF_PDM_InitFieldNoDefault( &m_sourceStepping, "SourceStepping", "" );
m_sourceStepping = new RimSummaryPlotSourceStepping;
m_sourceStepping->setSourceSteppingType( RimSummaryDataSourceStepping::Axis::Y_AXIS );
@ -114,6 +116,7 @@ void RimSummaryMultiPlot::insertPlot( RimPlot* plot, size_t index )
CVF_ASSERT( sumPlot != nullptr );
if ( sumPlot )
{
sumPlot->axisChanged.connect( this, &RimSummaryMultiPlot::onSubPlotAxisChanged );
sumPlot->curvesChanged.connect( this, &RimSummaryMultiPlot::onSubPlotChanged );
RimMultiPlot::insertPlot( plot, index );
}
@ -287,6 +290,9 @@ void RimSummaryMultiPlot::defineUiOrdering( QString uiConfigName, caf::PdmUiOrde
layoutGroup->add( &m_rowsPerPage );
layoutGroup->add( &m_majorTickmarkCount );
caf::PdmUiGroup* axesGroup = uiOrdering.addNewGroup( "Axes" );
axesGroup->add( &m_syncSubPlotAxes );
uiOrdering.skipRemainingFields( true );
}
@ -499,6 +505,7 @@ void RimSummaryMultiPlot::initAfterRead()
for ( auto plot : summaryPlots() )
{
plot->axisChanged.connect( this, &RimSummaryMultiPlot::onSubPlotAxisChanged );
plot->curvesChanged.connect( this, &RimSummaryMultiPlot::onSubPlotChanged );
}
}
@ -576,3 +583,20 @@ void RimSummaryMultiPlot::onSubPlotChanged( const caf::SignalEmitter* emitter )
updatePlotWindowTitle();
applyPlotWindowTitleToWidgets();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryMultiPlot::onSubPlotAxisChanged( const caf::SignalEmitter* emitter, RimSummaryPlot* summaryPlot )
{
if ( !m_syncSubPlotAxes() ) return;
for ( auto plot : summaryPlots() )
{
if ( plot != summaryPlot )
{
plot->copyMatchingAxisPropertiesFromOther( *summaryPlot );
plot->updateAll();
}
}
}

View File

@ -98,6 +98,7 @@ private:
void duplicate();
void onSubPlotChanged( const caf::SignalEmitter* emitter );
void onSubPlotAxisChanged( const caf::SignalEmitter* emitter, RimSummaryPlot* summaryPlot );
private:
caf::PdmField<bool> m_autoPlotTitles;
@ -105,6 +106,7 @@ private:
caf::PdmField<bool> m_syncAxisRanges;
caf::PdmField<bool> m_disableWheelZoom;
caf::PdmField<bool> m_createPlotDuplicate;
caf::PdmField<bool> m_syncSubPlotAxes;
caf::PdmChildField<RimSummaryPlotSourceStepping*> m_sourceStepping;

View File

@ -98,6 +98,7 @@ RimSummaryPlot::RimSummaryPlot( bool isCrossPlot )
: RimPlot()
, m_isCrossPlot( isCrossPlot )
, curvesChanged( this )
, axisChanged( this )
{
CAF_PDM_InitScriptableObject( "Summary Plot", ":/SummaryPlotLight16x16.png", "", "A Summary Plot" );
@ -617,6 +618,24 @@ void RimSummaryPlot::copyAxisPropertiesFromOther( const RimSummaryPlot& sourceSu
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryPlot::copyMatchingAxisPropertiesFromOther( const RimSummaryPlot& summaryPlot )
{
for ( auto apToCopy : summaryPlot.plotAxes() )
{
for ( auto ap : plotAxes() )
{
if ( ap->name().compare( apToCopy->name() ) == 0 )
{
QString data = apToCopy->writeObjectToXmlString();
ap->readObjectFromXmlString( data, caf::PdmDefaultObjectFactory::instance() );
}
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -1743,6 +1762,7 @@ void RimSummaryPlot::connectAxisSignals( RimPlotAxisProperties* axis )
//--------------------------------------------------------------------------------------------------
void RimSummaryPlot::axisSettingsChanged( const caf::SignalEmitter* emitter )
{
axisChanged.send( this );
updateAxes();
}

View File

@ -80,7 +80,8 @@ class RimSummaryPlot : public RimPlot, public RimSummaryDataSourceStepping
CAF_PDM_HEADER_INIT;
public:
caf::Signal<> curvesChanged;
caf::Signal<> curvesChanged;
caf::Signal<RimSummaryPlot*> axisChanged;
public:
RimSummaryPlot( bool isCrossPlot = false );
@ -150,6 +151,7 @@ public:
QString generatedPlotTitleFromAllCurves() const;
void copyAxisPropertiesFromOther( const RimSummaryPlot& sourceSummaryPlot );
void copyMatchingAxisPropertiesFromOther( const RimSummaryPlot& sourceSummaryPlot );
void updateAll();
void updateLegend() override;