Add support for giving all axes with the same label the same range.

This commit is contained in:
Jon Jenssen
2022-03-08 16:16:07 +01:00
committed by jonjenssen
parent 728885a6c8
commit d7555cbf4c
5 changed files with 85 additions and 2 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 263 B

View File

@@ -13,7 +13,8 @@
<file>AnalysisPlotFilter16x16.png</file>
<file>AppLogo48x48.png</file>
<file>Axes16x16.png</file>
<file>BottomAxis16x16.png</file>
<file>AxesSync16x16.png</file>
<file>BottomAxis16x16.png</file>
<file>Bullet.png</file>
<file>CascadeWindows.svg</file>
<file>Case.svg</file>

View File

@@ -87,7 +87,7 @@ RimMultiPlot::RimMultiPlot()
CAF_PDM_InitFieldNoDefault( &m_subTitleFontSize, "SubTitleFontSize", "Sub Plot Title Font Size" );
m_subTitleFontSize = caf::FontTools::RelativeSize::Large;
CAF_PDM_InitField( &m_pagePreviewMode, "PagePreviewMode", false, "Page Preview Mode" );
CAF_PDM_InitField( &m_pagePreviewMode, "PagePreviewMode", false, "Page Preview Mode", "", "Page Preview" );
m_pagePreviewMode.uiCapability()->setUiEditorTypeName( caf::PdmUiToolButtonEditor::uiEditorTypeName() );
m_pagePreviewMode.uiCapability()->setUiIconFromResourceString( ":/PagePreview16x16.png" );
m_viewer = nullptr;
@@ -192,6 +192,8 @@ void RimMultiPlot::insertPlot( RimPlot* plot, size_t index )
{
setTickmarkCount( plot, m_majorTickmarkCount() );
if ( index > m_plots.size() ) index = m_plots.size();
m_plots.insert( index, plot );
if ( m_viewer )

View File

@@ -39,9 +39,12 @@
#include "RiuSummaryVectorSelectionUi.h"
#include "cafPdmUiComboBoxEditor.h"
#include "cafPdmUiPushButtonEditor.h"
#include "cafPdmUiTreeOrdering.h"
#include "cafPdmUiTreeSelectionEditor.h"
#include <QDebug>
CAF_PDM_SOURCE_INIT( RimSummaryMultiPlot, "MultiSummaryPlot" );
//--------------------------------------------------------------------------------------------------
///
@@ -54,6 +57,11 @@ RimSummaryMultiPlot::RimSummaryMultiPlot()
CAF_PDM_InitField( &m_autoPlotTitles, "AutoPlotTitles", true, "Auto Plot Titles" );
CAF_PDM_InitField( &m_autoPlotTitlesOnSubPlots, "AutoPlotTitlesSubPlots", true, "Auto Plot Titles Sub Plots" );
CAF_PDM_InitField( &m_syncAxisRanges, "SyncAxisRanges", false, "", "", "Sync Axis Ranges in All Plots" );
m_syncAxisRanges.xmlCapability()->disableIO();
m_syncAxisRanges.uiCapability()->setUiEditorTypeName( caf::PdmUiPushButtonEditor::uiEditorTypeName() );
m_syncAxisRanges.uiCapability()->setUiIconFromResourceString( ":/AxesSync16x16.png" );
CAF_PDM_InitFieldNoDefault( &m_sourceStepping, "SourceStepping", "" );
m_sourceStepping = new RimSummaryPlotSourceStepping;
m_sourceStepping->setSourceSteppingType( RimSummaryDataSourceStepping::Axis::Y_AXIS );
@@ -222,12 +230,34 @@ void RimSummaryMultiPlot::fieldChangedByUi( const caf::PdmFieldHandle* changedFi
onLoadDataAndUpdate();
updateLayout();
}
else if ( changedField == &m_syncAxisRanges )
{
syncAxisRanges();
m_syncAxisRanges = false;
}
else
{
RimMultiPlot::fieldChangedByUi( changedField, oldValue, newValue );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryMultiPlot::defineEditorAttribute( const caf::PdmFieldHandle* field,
QString uiConfigName,
caf::PdmUiEditorAttribute* attribute )
{
if ( &m_syncAxisRanges == field )
{
caf::PdmUiPushButtonEditorAttribute* attrib = dynamic_cast<caf::PdmUiPushButtonEditorAttribute*>( attribute );
if ( attrib )
{
attrib->m_buttonText = "Sync Axes";
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -360,6 +390,8 @@ std::vector<caf::PdmFieldHandle*> RimSummaryMultiPlot::fieldsToShowInToolbar()
{
std::vector<caf::PdmFieldHandle*> toolBarFields;
toolBarFields.push_back( &m_syncAxisRanges );
auto& sourceObject = m_sourceStepping();
if ( sourceObject )
{
@@ -377,3 +409,45 @@ bool RimSummaryMultiPlot::handleGlobalKeyEvent( QKeyEvent* keyEvent )
{
return RimSummaryPlotControls::handleKeyEvents( m_sourceStepping(), keyEvent );
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryMultiPlot::syncAxisRanges()
{
std::map<QString, std::pair<double, double>> axisRanges;
// gather current min/max values for each category (axis label)
for ( auto plot : summaryPlots() )
{
for ( auto axis : plot->plotAxes() )
{
double minVal = axis->visibleRangeMin();
double maxVal = axis->visibleRangeMax();
if ( axisRanges.count( axis->name() ) == 0 )
{
axisRanges[axis->name()] = std::make_pair( axis->visibleRangeMin(), axis->visibleRangeMax() );
}
else
{
auto& [currentMin, currentMax] = axisRanges[axis->name()];
axisRanges[axis->name()] = std::make_pair( std::min( currentMin, minVal ), std::max( currentMax, maxVal ) );
}
}
}
// set all plots to use the global min/max values for each category
for ( auto plot : summaryPlots() )
{
for ( auto axis : plot->plotAxes() )
{
const auto& [minVal, maxVal] = axisRanges[axis->name()];
axis->setAutoZoom( false );
axis->setVisibleRangeMin( minVal );
axis->setVisibleRangeMax( maxVal );
}
plot->updateAxes();
}
}

View File

@@ -59,6 +59,8 @@ public:
std::vector<caf::PdmFieldHandle*> fieldsToShowInToolbar();
void syncAxisRanges();
protected:
bool handleGlobalKeyEvent( QKeyEvent* keyEvent ) override;
@@ -66,6 +68,9 @@ private:
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
void populateNameHelper( RimSummaryPlotNameHelper* nameHelper );
void defineEditorAttribute( const caf::PdmFieldHandle* field,
QString uiConfigName,
caf::PdmUiEditorAttribute* attribute ) override;
std::vector<RimSummaryPlot*> summaryPlots() const;
@@ -76,6 +81,7 @@ private:
private:
caf::PdmField<bool> m_autoPlotTitles;
caf::PdmField<bool> m_autoPlotTitlesOnSubPlots;
caf::PdmField<bool> m_syncAxisRanges;
caf::PdmChildField<RimSummaryPlotSourceStepping*> m_sourceStepping;