#2660 Ensemble filtering. Fix sliders and labels

This commit is contained in:
Bjørn Erik Jensen 2018-06-07 13:41:45 +02:00
parent 8d0149b4e9
commit 14cf6470f0
5 changed files with 110 additions and 21 deletions

View File

@ -28,15 +28,16 @@
CAF_PDM_SOURCE_INIT(RimEnsembleCurveFilter, "RimEnsembleCurveFilter");
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimEnsembleCurveFilter::RimEnsembleCurveFilter()
RimEnsembleCurveFilter::RimEnsembleCurveFilter() : m_lowerLimit(0), m_upperLimit(0)
{
CAF_PDM_InitObject("Ensemble Curve Filter", ":/EnsembleCurveSet16x16.png", "", "");
CAF_PDM_InitFieldNoDefault(&m_active, "Active", "Active", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_ensembleParameter, "EnsembleParameter", "Ensemble Parameter", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_ensembleParameterName, "EnsembleParameter", "Ensemble Parameter", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_minValue, "MinValue", "Min", "", "", "");
m_minValue.uiCapability()->setUiEditorTypeName(caf::PdmUiDoubleSliderEditor::uiEditorTypeName());
@ -74,7 +75,7 @@ QList<caf::PdmOptionItemInfo> RimEnsembleCurveFilter::calculateValueOptions(cons
{
QList<caf::PdmOptionItemInfo> options;
if (fieldNeedingOptions == &m_ensembleParameter)
if (fieldNeedingOptions == &m_ensembleParameterName)
{
auto curveSet = parentCurveSet();
if (curveSet)
@ -90,7 +91,7 @@ QList<caf::PdmOptionItemInfo> RimEnsembleCurveFilter::calculateValueOptions(cons
{
auto curveSet = parentCurveSet();
auto ensemble = curveSet ? curveSet->summaryCaseCollection() : nullptr;
auto eParam = ensemble ? ensemble->ensembleParameter(m_ensembleParameter) : EnsembleParameter();
auto eParam = ensemble ? ensemble->ensembleParameter(m_ensembleParameterName) : EnsembleParameter();
if (eParam.isText())
{
@ -111,15 +112,12 @@ void RimEnsembleCurveFilter::fieldChangedByUi(const caf::PdmFieldHandle* changed
{
auto curveSet = parentCurveSet();
if (changedField == &m_ensembleParameter)
if (changedField == &m_ensembleParameterName)
{
auto ensemble = curveSet ? curveSet->summaryCaseCollection() : nullptr;
auto eParam = ensemble ? ensemble->ensembleParameter(m_ensembleParameter) : EnsembleParameter();
auto eParam = selectedEnsembleParameter();
if (eParam.isNumeric())
{
m_minValue = eParam.minValue;
m_maxValue = eParam.maxValue;
setDefaultValues();
}
else if (eParam.isText())
{
@ -145,11 +143,9 @@ void RimEnsembleCurveFilter::fieldChangedByUi(const caf::PdmFieldHandle* changed
//--------------------------------------------------------------------------------------------------
void RimEnsembleCurveFilter::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
{
auto curveSet = parentCurveSet();
auto ensemble = curveSet ? curveSet->summaryCaseCollection() : nullptr;
auto eParam = ensemble ? ensemble->ensembleParameter(m_ensembleParameter) : EnsembleParameter();
auto eParam = selectedEnsembleParameter();
uiOrdering.add(&m_ensembleParameter);
uiOrdering.add(&m_ensembleParameterName);
if (eParam.isNumeric())
{
@ -164,6 +160,24 @@ void RimEnsembleCurveFilter::defineUiOrdering(QString uiConfigName, caf::PdmUiOr
uiOrdering.skipRemainingFields(true);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEnsembleCurveFilter::defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute)
{
if (field == &m_minValue || field == &m_maxValue)
{
caf::PdmUiDoubleSliderEditorAttribute* myAttr = dynamic_cast<caf::PdmUiDoubleSliderEditorAttribute*>(attribute);
if (!myAttr)
{
return;
}
myAttr->m_minimum = m_lowerLimit;
myAttr->m_maximum = m_upperLimit;
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -176,11 +190,11 @@ std::vector<RimSummaryCase*> RimEnsembleCurveFilter::applyFilter(const std::vect
std::set<RimSummaryCase*> casesToRemove;
for (const auto& sumCase : allSumCases)
{
auto eParam = ensemble->ensembleParameter(m_ensembleParameter());
auto eParam = ensemble->ensembleParameter(m_ensembleParameterName());
if (!eParam.isValid()) continue;
if (!sumCase->caseRealizationParameters()) continue;
auto crpValue = sumCase->caseRealizationParameters()->parameterValue(m_ensembleParameter());
auto crpValue = sumCase->caseRealizationParameters()->parameterValue(m_ensembleParameterName());
if (eParam.isNumeric())
{
@ -210,6 +224,14 @@ std::vector<RimSummaryCase*> RimEnsembleCurveFilter::applyFilter(const std::vect
return filteredCases;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEnsembleCurveFilter::loadDataAndUpdate()
{
setDefaultValues();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -227,3 +249,29 @@ RimEnsembleCurveSet * RimEnsembleCurveFilter::parentCurveSet() const
firstAncestorOrThisOfType(curveSet);
return curveSet;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEnsembleCurveFilter::setDefaultValues()
{
auto eParam = selectedEnsembleParameter();
if (eParam.isValid() && eParam.isNumeric())
{
m_lowerLimit = m_minValue = eParam.minValue;
m_upperLimit = m_maxValue = eParam.maxValue;
m_minValue.uiCapability()->setUiName(QString("Min (%1)").arg(m_lowerLimit));
m_maxValue.uiCapability()->setUiName(QString("Max (%1)").arg(m_upperLimit));
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
EnsembleParameter RimEnsembleCurveFilter::selectedEnsembleParameter() const
{
auto curveSet = parentCurveSet();
auto ensemble = curveSet ? curveSet->summaryCaseCollection() : nullptr;
return ensemble ? ensemble->ensembleParameter(m_ensembleParameterName) : EnsembleParameter();
}

View File

@ -22,6 +22,7 @@
#include "cafPdmField.h"
#include "cafPdmObject.h"
class EnsembleParameter;
class RimEnsembleCurveSet;
class RimSummaryCase;
@ -39,22 +40,30 @@ public:
std::set<QString> categories() const;
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly) override;
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute);
std::vector<RimSummaryCase*> applyFilter(const std::vector<RimSummaryCase*>& allSumCases);
std::vector<RimSummaryCase*> applyFilter(const std::vector<RimSummaryCase*>& allSumCases);
void loadDataAndUpdate();
protected:
virtual caf::PdmFieldHandle* objectToggleField();
private:
RimEnsembleCurveSet * parentCurveSet() const;
void setDefaultValues();
EnsembleParameter selectedEnsembleParameter() const;
private:
caf::PdmField<bool> m_active;
caf::PdmField<QString> m_ensembleParameter;
caf::PdmField<QString> m_ensembleParameterName;
caf::PdmField<double> m_minValue;
caf::PdmField<double> m_maxValue;
caf::PdmField<std::vector<QString>> m_categories;
double m_lowerLimit;
double m_upperLimit;
};

View File

@ -76,6 +76,16 @@ bool RimEnsembleCurveFilterCollection::isActive() const
return m_active;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QList<caf::PdmOptionItemInfo> RimEnsembleCurveFilterCollection::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly)
{
QList<caf::PdmOptionItemInfo> options;
return options;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
@ -89,6 +99,22 @@ void RimEnsembleCurveFilterCollection::fieldChangedByUi(const caf::PdmFieldHandl
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEnsembleCurveFilterCollection::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
{
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEnsembleCurveFilterCollection::loadDataAndUpdate()
{
for (auto& filter : m_filters) filter->loadDataAndUpdate();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -42,7 +42,11 @@ public:
bool isActive() const;
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue);
virtual QList<caf::PdmOptionItemInfo> calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool* useOptionsOnly) override;
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
void loadDataAndUpdate();
protected:
virtual caf::PdmFieldHandle* objectToggleField();

View File

@ -221,6 +221,8 @@ void RimEnsembleCurveSet::loadDataAndUpdate(bool updateParentPlot)
firstAncestorOrThisOfTypeAsserted(parentPlot);
parentPlot->updateAll();
}
m_curveFilters->loadDataAndUpdate();
}
//--------------------------------------------------------------------------------------------------