#864 Added SummaryCurveAutoName

This commit is contained in:
Magne Sjaastad 2016-11-04 14:32:39 +01:00
parent b38c1986aa
commit 1bd070a8f5
5 changed files with 331 additions and 29 deletions

View File

@ -11,6 +11,7 @@ ${CEE_CURRENT_LIST_DIR}RimSummaryCase.h
${CEE_CURRENT_LIST_DIR}RimSummaryCaseCollection.h
${CEE_CURRENT_LIST_DIR}RimSummaryCurve.h
${CEE_CURRENT_LIST_DIR}RimSummaryCurveAppearanceCalculator.h
${CEE_CURRENT_LIST_DIR}RimSummaryCurveAutoName.h
${CEE_CURRENT_LIST_DIR}RimSummaryCurveFilter.h
${CEE_CURRENT_LIST_DIR}RimSummaryCurvesCalculator.h
${CEE_CURRENT_LIST_DIR}RimSummaryFilter.h
@ -27,6 +28,7 @@ ${CEE_CURRENT_LIST_DIR}RimSummaryCase.cpp
${CEE_CURRENT_LIST_DIR}RimSummaryCaseCollection.cpp
${CEE_CURRENT_LIST_DIR}RimSummaryCurve.cpp
${CEE_CURRENT_LIST_DIR}RimSummaryCurveAppearanceCalculator.cpp
${CEE_CURRENT_LIST_DIR}RimSummaryCurveAutoName.cpp
${CEE_CURRENT_LIST_DIR}RimSummaryCurveFilter.cpp
${CEE_CURRENT_LIST_DIR}RimSummaryCurvesCalculator.cpp
${CEE_CURRENT_LIST_DIR}RimSummaryFilter.cpp

View File

@ -28,6 +28,7 @@
#include "RimEclipseResultCase.h"
#include "RimProject.h"
#include "RimSummaryCase.h"
#include "RimSummaryCurveAutoName.h"
#include "RimSummaryCurveFilter.h"
#include "RimSummaryFilter.h"
#include "RimSummaryPlot.h"
@ -156,7 +157,8 @@ RimSummaryCurve::RimSummaryCurve()
m_summaryFilter.uiCapability()->setUiTreeChildrenHidden(true);
m_summaryFilter.uiCapability()->setUiHidden(true);
m_summaryFilter = new RimSummaryFilter();
m_summaryFilterObject = std::unique_ptr<RimSummaryFilter>(new RimSummaryFilter);
m_summaryFilter = m_summaryFilterObject.get();
CAF_PDM_InitFieldNoDefault(&m_uiFilterResultSelection, "FilterResultSelection", "Filter Result", "", "", "");
m_uiFilterResultSelection.xmlCapability()->setIOWritable(false);
@ -165,18 +167,22 @@ RimSummaryCurve::RimSummaryCurve()
m_uiFilterResultSelection.uiCapability()->setUiLabelPosition(caf::PdmUiItemInfo::HIDDEN);
m_uiFilterResultSelection.uiCapability()->setAutoAddingOptionFromValue(false);
CAF_PDM_InitFieldNoDefault(&m_curveVariable, "SummaryAddress", "SummaryAddress", "", "", "");
m_curveVariable.uiCapability()->setUiHidden(true);
m_curveVariable.uiCapability()->setUiTreeChildrenHidden(true);
m_curveVariableObject = std::unique_ptr<RimSummaryAddress>(new RimSummaryAddress);
m_curveVariable = m_curveVariableObject.get();
CAF_PDM_InitFieldNoDefault(&m_plotAxis, "PlotAxis", "Axis", "", "", "");
m_curveVariable = new RimSummaryAddress;
CAF_PDM_InitFieldNoDefault(&m_curveNameConfig, "SummaryCurveNameConfig", "SummaryCurveNameConfig", "", "", "");
m_curveNameConfig.uiCapability()->setUiHidden(true);
m_curveNameConfig.uiCapability()->setUiTreeChildrenHidden(true);
m_curveNameConfigObject = std::unique_ptr<RimSummaryCurveAutoName>(new RimSummaryCurveAutoName);
m_curveNameConfig = m_curveNameConfigObject.get();
// Add some space before name to indicate these belong to the Auto Name field
CAF_PDM_InitField(&m_addCaseNameToCurveName, "AddCaseNameToCurveName", true, " Case Name", "", "", "");
m_symbolSkipPixelDistance = 10.0f;
m_curveThickness = 2;
updateOptionSensitivity();
@ -187,8 +193,6 @@ RimSummaryCurve::RimSummaryCurve()
//--------------------------------------------------------------------------------------------------
RimSummaryCurve::~RimSummaryCurve()
{
delete m_curveVariable();
delete m_summaryFilter();
}
//--------------------------------------------------------------------------------------------------
@ -337,19 +341,7 @@ QList<caf::PdmOptionItemInfo> RimSummaryCurve::calculateValueOptions(const caf::
//--------------------------------------------------------------------------------------------------
QString RimSummaryCurve::createCurveAutoName()
{
QString generatedCurveName = QString::fromStdString( m_curveVariable->address().uiText()) + "["+ this->unitName().c_str() + "]";
if (m_addCaseNameToCurveName && m_summaryCase())
{
if (!generatedCurveName.isEmpty())
{
generatedCurveName += ", ";
}
generatedCurveName += m_summaryCase->shortName();
}
return generatedCurveName;
return m_curveNameConfig->curveName(m_curveVariable->address());
}
//--------------------------------------------------------------------------------------------------
@ -420,9 +412,11 @@ void RimSummaryCurve::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering&
appearanceGroup->add(&m_lineStyle);
appearanceGroup->add(&m_curveName);
appearanceGroup->add(&m_isUsingAutoName);
if (m_isUsingAutoName)
{
appearanceGroup->add(&m_addCaseNameToCurveName);
caf::PdmUiGroup* autoNameGroup = appearanceGroup->addNewGroup("Auto Name Config");
m_curveNameConfig->defineUiOrdering(uiConfigName, *autoNameGroup);
}
uiOrdering.add(&m_plotAxis);
@ -478,11 +472,6 @@ void RimSummaryCurve::fieldChangedByUi(const caf::PdmFieldHandle* changedField,
{
plot->updateAxes();
}
else if (changedField == &m_addCaseNameToCurveName)
{
this->uiCapability()->updateConnectedEditors();
updateCurveName();
}
else if (changedField == &m_plotAxis)
{
updateQwtPlotAxis();

View File

@ -31,10 +31,13 @@
#include "cafAppEnum.h"
#include <memory>
class RifReaderEclipseSummary;
class RimSummaryCase;
class RimSummaryFilter;
class RiuLineSegmentQwtPlotCurve;
class RimSummaryCurveAutoName;
class RimSummaryAddress: public caf::PdmObject
{
@ -93,7 +96,7 @@ protected:
// RimPlotCurve overrides
virtual QString createCurveAutoName() override;
virtual void updateZoomInParentPlot() override;
virtual void updateZoomInParentPlot() override;
virtual void onLoadDataAndUpdate() override;
private:
@ -111,11 +114,17 @@ private:
caf::PdmPtrField<RimSummaryCase*> m_summaryCase;
caf::PdmChildField<RimSummaryAddress*> m_curveVariable;
caf::PdmField<QString> m_selectedVariableDisplayField;
caf::PdmField<bool> m_addCaseNameToCurveName;
caf::PdmChildField<RimSummaryCurveAutoName*> m_curveNameConfig;
caf::PdmField< caf::AppEnum< RimDefines::PlotAxis > > m_plotAxis;
// Filter fields
caf::PdmChildField<RimSummaryFilter*> m_summaryFilter;
caf::PdmField<int> m_uiFilterResultSelection;
// Internal objects managed by unique_ptr
std::unique_ptr<RimSummaryAddress> m_curveVariableObject;
std::unique_ptr<RimSummaryFilter> m_summaryFilterObject;
std::unique_ptr<RimSummaryCurveAutoName> m_curveNameConfigObject;
};

View File

@ -0,0 +1,243 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2016 Statoil ASA
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#include "RimSummaryCurveAutoName.h"
#include "RifEclipseSummaryAddress.h"
#include "RimSummaryCurve.h"
#include "RimSummaryCase.h"
CAF_PDM_SOURCE_INIT(RimSummaryCurveAutoName, "SummaryCurveAutoName");
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimSummaryCurveAutoName::RimSummaryCurveAutoName()
{
CAF_PDM_InitObject("RimSummaryCurveAutoName", "", "", "");
CAF_PDM_InitField(&m_quantity, "Quantity", true, "Quantity", "", "", "");
CAF_PDM_InitField(&m_unit, "Unit", true, "Unit", "", "", "");
CAF_PDM_InitField(&m_regionNumber, "RegionNumber", true, "RegionNumber", "", "", "");
CAF_PDM_InitField(&m_wellGroupName, "WellGroupName", true, "WellGroupName", "", "", "");
CAF_PDM_InitField(&m_wellName, "WellName", true, "WellName", "", "", "");
CAF_PDM_InitField(&m_wellSegmentNumber, "WellSegmentNumber", true, "WellSegmentNumber", "", "", "");
CAF_PDM_InitField(&m_lgrName, "LgrName", true, "LgrName", "", "", "");
CAF_PDM_InitField(&m_completion, "Completion", true, "Completion", "", "", "");
CAF_PDM_InitField(&m_caseName, "CaseName", true, "CaseName", "", "", "");
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RimSummaryCurveAutoName::curveName(const RifEclipseSummaryAddress& summaryAddress) const
{
std::string text;
RimSummaryCurve* summaryCurve = nullptr;
this->firstAncestorOrThisOfType(summaryCurve);
if (m_quantity)
{
text += summaryAddress.quantityName();
if (m_unit && summaryCurve)
{
text += "[" + summaryCurve->unitName() + "]";
}
}
switch (summaryAddress.category())
{
case RifEclipseSummaryAddress::SUMMARY_REGION:
{
if (m_regionNumber)
{
if (text.size() > 0) text +=":";
text += std::to_string(summaryAddress.regionNumber());
}
}
break;
case RifEclipseSummaryAddress::SUMMARY_REGION_2_REGION:
{
if (m_regionNumber)
{
if (text.size() > 0) text += ":";
text += std::to_string(summaryAddress.regionNumber());
text += "-" + std::to_string(summaryAddress.regionNumber2());
}
}
break;
case RifEclipseSummaryAddress::SUMMARY_WELL_GROUP:
{
if (m_wellGroupName)
{
if (text.size() > 0) text += ":";
text += summaryAddress.wellGroupName();
}
}
break;
case RifEclipseSummaryAddress::SUMMARY_WELL:
{
appendWellName(text, summaryAddress);
}
break;
case RifEclipseSummaryAddress::SUMMARY_WELL_COMPLETION:
{
appendWellName(text, summaryAddress);
if (m_completion)
{
if (text.size() > 0) text += ":";
text += std::to_string(summaryAddress.cellI()) + ", "
+ std::to_string(summaryAddress.cellJ()) + ", "
+ std::to_string(summaryAddress.cellK());
}
}
break;
case RifEclipseSummaryAddress::SUMMARY_WELL_LGR:
{
appendLgrName(text, summaryAddress);
appendWellName(text, summaryAddress);
}
break;
case RifEclipseSummaryAddress::SUMMARY_WELL_COMPLETION_LGR:
{
appendLgrName(text, summaryAddress);
appendWellName(text, summaryAddress);
if (m_completion)
{
if (text.size() > 0) text += ":";
text += std::to_string(summaryAddress.cellI()) + ", "
+ std::to_string(summaryAddress.cellJ()) + ", "
+ std::to_string(summaryAddress.cellK());
}
}
break;
case RifEclipseSummaryAddress::SUMMARY_WELL_SEGMENT:
{
appendWellName(text, summaryAddress);
if (m_wellSegmentNumber)
{
if (text.size() > 0) text += ":";
text += ":" + summaryAddress.wellSegmentNumber();
}
}
break;
case RifEclipseSummaryAddress::SUMMARY_BLOCK:
{
if (m_completion)
{
if (text.size() > 0) text += ":";
text += std::to_string(summaryAddress.cellI()) + ", "
+ std::to_string(summaryAddress.cellJ()) + ", "
+ std::to_string(summaryAddress.cellK());
}
}
break;
case RifEclipseSummaryAddress::SUMMARY_BLOCK_LGR:
{
appendLgrName(text, summaryAddress);
if (m_completion)
{
if (text.size() > 0) text += ":";
text += std::to_string(summaryAddress.cellI()) + ", "
+ std::to_string(summaryAddress.cellJ()) + ", "
+ std::to_string(summaryAddress.cellK());
}
}
break;
}
if (summaryCurve)
{
if (m_caseName)
{
if (summaryCurve && summaryCurve->summaryCase())
{
if (text.size() > 0) text += ", ";
text += summaryCurve->summaryCase()->caseName().toStdString();
}
}
}
return QString::fromStdString(text);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryCurveAutoName::appendWellName(std::string& text, const RifEclipseSummaryAddress& summaryAddress) const
{
if (m_wellName)
{
if (text.size() > 0) text += ":";
text += summaryAddress.wellName();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryCurveAutoName::appendLgrName(std::string& text, const RifEclipseSummaryAddress& summaryAddress) const
{
if (m_lgrName)
{
if (text.size() > 0) text += ":";
text += ":" + summaryAddress.lgrName();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryCurveAutoName::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue)
{
RimSummaryCurve* summaryCurve = nullptr;
this->firstAncestorOrThisOfType(summaryCurve);
if (summaryCurve)
{
summaryCurve->updateCurveName();
summaryCurve->updateConnectedEditors();
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimSummaryCurveAutoName::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
{
uiOrdering.add(&m_caseName);
uiOrdering.add(&m_quantity);
uiOrdering.add(&m_unit);
uiOrdering.add(&m_regionNumber);
uiOrdering.add(&m_wellGroupName);
uiOrdering.add(&m_wellName);
uiOrdering.add(&m_wellSegmentNumber);
uiOrdering.add(&m_lgrName);
uiOrdering.add(&m_completion);
}

View File

@ -0,0 +1,59 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2016 Statoil ASA
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
#pragma once
#include "cafPdmField.h"
#include "cafPdmObject.h"
class RifEclipseSummaryAddress;
class RimSummaryCurveAutoName : public caf::PdmObject
{
CAF_PDM_HEADER_INIT;
public:
RimSummaryCurveAutoName();;
QString curveName(const RifEclipseSummaryAddress& summaryAddress) const;
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
protected:
friend RimSummaryCurve;
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
private:
void appendWellName(std::string& text, const RifEclipseSummaryAddress& summaryAddress) const;
void appendLgrName(std::string& text, const RifEclipseSummaryAddress& summaryAddress) const;
private:
caf::PdmField<bool> m_quantity;
caf::PdmField<bool> m_unit;
caf::PdmField<bool> m_regionNumber;
caf::PdmField<bool> m_wellGroupName;
caf::PdmField<bool> m_wellName;
caf::PdmField<bool> m_wellSegmentNumber;
caf::PdmField<bool> m_lgrName;
caf::PdmField<bool> m_completion;
caf::PdmField<bool> m_caseName;
};