#4158 Implement info box for grid cross plots and improve plot overlay legends

This commit is contained in:
Gaute Lindkvist
2019-03-25 14:47:55 +01:00
parent c47f2a30d8
commit aa32caae33
16 changed files with 351 additions and 38 deletions

View File

@@ -48,6 +48,7 @@ RimGridCrossPlot::RimGridCrossPlot()
{
CAF_PDM_InitObject("Grid Cross Plot", ":/SummaryXPlotLight16x16.png", "", "");
CAF_PDM_InitField(&m_showInfoBox, "ShowInfoBox", true, "Show Info Box", "", "", "");
CAF_PDM_InitField(&m_showLegend, "ShowLegend", true, "Show Legend", "", "", "");
CAF_PDM_InitField(&m_legendFontSize, "LegendFontSize", 10, "Legend Font Size", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_nameConfig, "NameConfig", "Name Config", "", "", "");
@@ -94,13 +95,18 @@ RimGridCrossPlotCurveSet* RimGridCrossPlot::createCurveSet()
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
int RimGridCrossPlot::indexOfCurveSet(const RimGridCrossPlotCurveSet* curveSet) const
int RimGridCrossPlot::indexOfCurveSet(const RimGridCrossPlotCurveSet* curveSetToCheck) const
{
for (size_t i = 0; i < m_crossPlotCurveSets.size(); ++i)
int index = 0;
for (auto curveSet : m_crossPlotCurveSets())
{
if (curveSet == m_crossPlotCurveSets[i])
if (curveSet == curveSetToCheck)
{
return static_cast<int>(i);
return index;
}
if (curveSet->isChecked() && curveSet->visibleCurveCount() > 0u)
{
index++;
}
}
return -1;
@@ -247,6 +253,14 @@ QString RimGridCrossPlot::createAutoName() const
return autoName.join(" ");
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimGridCrossPlot::showInfoBox() const
{
return m_showInfoBox();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -399,6 +413,7 @@ void RimGridCrossPlot::onLoadDataAndUpdate()
//--------------------------------------------------------------------------------------------------
void RimGridCrossPlot::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
{
uiOrdering.add(&m_showInfoBox);
uiOrdering.add(&m_showLegend);
if (m_showLegend())

View File

@@ -66,6 +66,7 @@ public:
void reattachCurvesToQwtAndReplot();
QString createAutoName() const override;
bool showInfoBox() const;
caf::PdmFieldHandle* userDescriptionField() override;
void detachAllCurves();
void performAutoNameUpdate() override;
@@ -112,6 +113,7 @@ protected:
RimGridCrossPlotNameConfig* nameConfig();
private:
caf::PdmField<bool> m_showInfoBox;
caf::PdmField<bool> m_showLegend;
caf::PdmField<int> m_legendFontSize;
caf::PdmChildField<RimGridCrossPlotNameConfig*> m_nameConfig;

View File

@@ -92,6 +92,14 @@ int RimGridCrossPlotCurve::groupIndex() const
return m_groupIndex;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
size_t RimGridCrossPlotCurve::sampleCount() const
{
return m_qwtPlotCurve->dataSize();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -43,9 +43,9 @@ public:
void setGroupingInformation(int curveSetIndex, int groupIndex);
void setSamples(const std::vector<double>& xValues, const std::vector<double>& yValues);
void setCurveAutoAppearance();
int groupIndex() const;
void setCurveAutoAppearance();
int groupIndex() const;
size_t sampleCount() const;
protected:
void determineSymbol();

View File

@@ -198,6 +198,36 @@ QString RimGridCrossPlotCurveSet::yAxisName() const
return m_yAxisProperty->resultVariableUiShortName();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RimGridCrossPlotCurveSet::infoText() const
{
if (!m_case()) return "";
if (visibleCurveCount() == 0u) return "";
QStringList textLines;
textLines += QString("<b>Case:</b> %1").arg(m_case()->caseUserDescription());
textLines += QString("<b>Parameters:</b>: %1 x %2")
.arg(m_xAxisProperty->resultVariableUiShortName())
.arg(m_yAxisProperty->resultVariableUiShortName());
if (m_timeStep != -1)
{
textLines += QString("<b>Time step:</b> %1").arg(timeStepString());
}
if (m_grouping != NO_GROUPING)
{
textLines += QString("<b>Grouped By:</b> %1").arg(groupParameter());
}
if (m_cellFilterView())
{
textLines += QString("<b>Filter view:</b> %1").arg(m_cellFilterView->name());
}
textLines += QString("<b>Sample Count:</b> %1").arg(sampleCount());
return textLines.join("<br/>\n");
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@@ -606,6 +636,32 @@ void RimGridCrossPlotCurveSet::destroyCurves()
m_crossPlotCurves.deleteAllChildObjects();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
size_t RimGridCrossPlotCurveSet::visibleCurveCount() const
{
size_t visibleCurves = 0;
for (auto curve : m_crossPlotCurves)
{
if (curve->isCurveVisible()) visibleCurves++;
}
return visibleCurves;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
size_t RimGridCrossPlotCurveSet::sampleCount() const
{
size_t sampleCount = 0;
for (auto curve : m_crossPlotCurves)
{
if (curve->isCurveVisible()) sampleCount += curve->sampleCount();
}
return sampleCount;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -97,6 +97,7 @@ public:
void setParentQwtPlotNoReplot(QwtPlot* parent);
QString xAxisName() const;
QString yAxisName() const;
QString infoText() const;
int indexInPlot() const;
QString createAutoName() const override;
@@ -131,6 +132,8 @@ public:
void setCustomColor(const cvf::Color3f color);
void destroyCurves();
size_t visibleCurveCount() const;
size_t sampleCount() const;
protected:
void initAfterRead() override;
void onLoadDataAndUpdate(bool updateParentPlot);
@@ -175,5 +178,5 @@ private:
caf::PdmField<bool> m_useCustomColor;
caf::PdmField<cvf::Color3f> m_customColor;
caf::PdmChildField<RimPlotCellFilterCollection*> m_plotCellFilterCollection;;
};