mirror of
https://github.com/OPM/ResInsight.git
synced 2026-09-03 20:53:13 -05:00
#1888 Curve appearance. Add and delete curves dynamically in preview plot due to current selection
This commit is contained in:
@@ -687,7 +687,7 @@ void RicSummaryCurveCreator::syncCurvesFromUiSelection()
|
|||||||
{
|
{
|
||||||
// Create a search map containing whats supposed to be curves
|
// Create a search map containing whats supposed to be curves
|
||||||
|
|
||||||
std::set<std::pair<RimSummaryCase*, RifEclipseSummaryAddress> > newCurveDefinitions;
|
std::set<std::pair<RimSummaryCase*, RifEclipseSummaryAddress> > allCurveDefinitions;
|
||||||
|
|
||||||
// Populate the newCurveDefinitions from the Gui
|
// Populate the newCurveDefinitions from the Gui
|
||||||
|
|
||||||
@@ -709,7 +709,7 @@ void RicSummaryCurveCreator::syncCurvesFromUiSelection()
|
|||||||
if (selectedAddresses.count(allAddresses[i]) > 0)
|
if (selectedAddresses.count(allAddresses[i]) > 0)
|
||||||
{
|
{
|
||||||
addrUnion.insert(allAddresses[i]);
|
addrUnion.insert(allAddresses[i]);
|
||||||
newCurveDefinitions.insert(std::make_pair(currCase, allAddresses[i]));
|
allCurveDefinitions.insert(std::make_pair(currCase, allAddresses[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Todo: Add text filter
|
// Todo: Add text filter
|
||||||
@@ -718,17 +718,53 @@ void RicSummaryCurveCreator::syncCurvesFromUiSelection()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
createCurvesFromCurveDefinitions(newCurveDefinitions);
|
std::vector<RimSummaryCurve*> currentCurvesInPlot = m_previewPlot->summaryCurves();
|
||||||
|
if (allCurveDefinitions.size() != currentCurvesInPlot.size())
|
||||||
|
{
|
||||||
|
std::set<std::pair<RimSummaryCase*, RifEclipseSummaryAddress>> currentCurveDefs;
|
||||||
|
std::set<std::pair<RimSummaryCase*, RifEclipseSummaryAddress>> newCurveDefs;
|
||||||
|
std::set<RimSummaryCurve*> deleteCurves;
|
||||||
|
|
||||||
|
for (const auto& curve : currentCurvesInPlot)
|
||||||
|
{
|
||||||
|
currentCurveDefs.insert(std::make_pair(curve->summaryCase(), curve->summaryAddress()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (allCurveDefinitions.size() < currentCurvesInPlot.size())
|
||||||
|
{
|
||||||
|
// Determine which curves to delete from plot
|
||||||
|
std::set<std::pair<RimSummaryCase*, RifEclipseSummaryAddress>> deleteCurveDefs;
|
||||||
|
std::set_difference(currentCurveDefs.begin(), currentCurveDefs.end(),
|
||||||
|
allCurveDefinitions.begin(), allCurveDefinitions.end(),
|
||||||
|
std::inserter(deleteCurveDefs, deleteCurveDefs.end()));
|
||||||
|
|
||||||
|
for (const auto& curve : currentCurvesInPlot)
|
||||||
|
{
|
||||||
|
std::pair<RimSummaryCase*, RifEclipseSummaryAddress> curveDef = std::make_pair(curve->summaryCase(), curve->summaryAddress());
|
||||||
|
if (deleteCurveDefs.count(curveDef))
|
||||||
|
deleteCurves.insert(curve);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Determine which curves are new since last time
|
||||||
|
std::set_difference(allCurveDefinitions.begin(), allCurveDefinitions.end(),
|
||||||
|
currentCurveDefs.begin(), currentCurveDefs.end(),
|
||||||
|
std::inserter(newCurveDefs, newCurveDefs.end()));
|
||||||
|
}
|
||||||
|
createCurvesFromCurveDefinitions(newCurveDefs, deleteCurves);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RicSummaryCurveCreator::createCurvesFromCurveDefinitions(const std::set<std::pair<RimSummaryCase*, RifEclipseSummaryAddress> >& newCurveDefinitions)
|
void RicSummaryCurveCreator::createCurvesFromCurveDefinitions(const std::set<std::pair<RimSummaryCase*, RifEclipseSummaryAddress> >& curveDefsToAdd,
|
||||||
|
const std::set<RimSummaryCurve*>& curvesToDelete)
|
||||||
{
|
{
|
||||||
RimSummaryCase* prevCase = nullptr;
|
RimSummaryCase* prevCase = nullptr;
|
||||||
RimPlotCurve::LineStyleEnum lineStyle = RimPlotCurve::STYLE_SOLID;
|
RimPlotCurve::LineStyleEnum lineStyle = RimPlotCurve::STYLE_SOLID;
|
||||||
RimSummaryCurveAppearanceCalculator curveLookCalc(newCurveDefinitions, getAllSummaryCaseNames(), getAllSummaryWellNames());
|
RimSummaryCurveAppearanceCalculator curveLookCalc(curveDefsToAdd, getAllSummaryCaseNames(), getAllSummaryWellNames());
|
||||||
|
|
||||||
if (!m_useAutoAppearanceAssignment())
|
if (!m_useAutoAppearanceAssignment())
|
||||||
{
|
{
|
||||||
@@ -759,9 +795,15 @@ void RicSummaryCurveCreator::createCurvesFromCurveDefinitions(const std::set<std
|
|||||||
m_regionAppearanceType = regiAppearance;
|
m_regionAppearanceType = regiAppearance;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Delete curves
|
||||||
|
for (const auto& curve : curvesToDelete)
|
||||||
|
{
|
||||||
|
m_previewPlot->deleteCurve(curve);
|
||||||
|
}
|
||||||
|
|
||||||
// Add new curves
|
// Add new curves
|
||||||
m_previewPlot->deleteAllTopLevelCurves();
|
//m_previewPlot->deleteAllTopLevelCurves();
|
||||||
for (const auto& curveDef : newCurveDefinitions)
|
for (const auto& curveDef : curveDefsToAdd)
|
||||||
{
|
{
|
||||||
RimSummaryCase* currentCase = curveDef.first;
|
RimSummaryCase* currentCase = curveDef.first;
|
||||||
RimSummaryCurve* curve = new RimSummaryCurve();
|
RimSummaryCurve* curve = new RimSummaryCurve();
|
||||||
|
|||||||
@@ -99,7 +99,8 @@ private:
|
|||||||
|
|
||||||
void loadDataAndUpdatePlot();
|
void loadDataAndUpdatePlot();
|
||||||
void syncCurvesFromUiSelection();
|
void syncCurvesFromUiSelection();
|
||||||
void createCurvesFromCurveDefinitions(const std::set<std::pair<RimSummaryCase*, RifEclipseSummaryAddress> >& newCurveDefinitions);
|
void createCurvesFromCurveDefinitions(const std::set<std::pair<RimSummaryCase*, RifEclipseSummaryAddress> >& curveDefsToAdd,
|
||||||
|
const std::set<RimSummaryCurve*>& curvesToDelete);
|
||||||
std::set<std::string> getAllSummaryCaseNames();
|
std::set<std::string> getAllSummaryCaseNames();
|
||||||
std::set<std::string> getAllSummaryWellNames();
|
std::set<std::string> getAllSummaryWellNames();
|
||||||
|
|
||||||
|
|||||||
@@ -448,6 +448,20 @@ QString RimSummaryPlot::asciiDataForPlotExport() const
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
std::vector<RimSummaryCurve*> RimSummaryPlot::summaryCurves() const
|
||||||
|
{
|
||||||
|
std::vector<RimSummaryCurve*> curves;
|
||||||
|
curves.reserve(m_summaryCurves.size());
|
||||||
|
for (const auto& curve : m_summaryCurves)
|
||||||
|
{
|
||||||
|
curves.push_back(curve);
|
||||||
|
}
|
||||||
|
return curves;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
|||||||
@@ -99,6 +99,8 @@ public:
|
|||||||
|
|
||||||
QString asciiDataForPlotExport() const;
|
QString asciiDataForPlotExport() const;
|
||||||
|
|
||||||
|
std::vector<RimSummaryCurve*> summaryCurves() const;
|
||||||
|
|
||||||
// RimViewWindow overrides
|
// RimViewWindow overrides
|
||||||
public:
|
public:
|
||||||
virtual QWidget* createViewWidget(QWidget* mainWindowParent) override;
|
virtual QWidget* createViewWidget(QWidget* mainWindowParent) override;
|
||||||
|
|||||||
Reference in New Issue
Block a user