#1178 Use well colors for Max Fraction Tracer

This commit is contained in:
Magne Sjaastad 2017-02-10 18:53:14 +01:00
parent 9fa772a7bc
commit b3e845ed5e
4 changed files with 58 additions and 8 deletions

View File

@ -18,6 +18,7 @@
#include "RimFlowDiagSolution.h" #include "RimFlowDiagSolution.h"
#include "RiaApplication.h"
#include "RiaColorTables.h" #include "RiaColorTables.h"
#include "RigActiveCellInfo.h" #include "RigActiveCellInfo.h"
@ -28,6 +29,7 @@
#include "RigSingleWellResultsData.h" #include "RigSingleWellResultsData.h"
#include "RimEclipseResultCase.h" #include "RimEclipseResultCase.h"
#include "RimEclipseWell.h"
#include "RimEclipseWellCollection.h" #include "RimEclipseWellCollection.h"
CAF_PDM_SOURCE_INIT(RimFlowDiagSolution, "FlowDiagSolution"); CAF_PDM_SOURCE_INIT(RimFlowDiagSolution, "FlowDiagSolution");
@ -283,15 +285,29 @@ cvf::Color3f RimFlowDiagSolution::tracerColor(QString tracerName)
if ( eclCase ) if ( eclCase )
{ {
const cvf::Collection<RigSingleWellResultsData>& wellResults = eclCase->reservoirData()->wellResults(); RimEclipseView* activeView = dynamic_cast<RimEclipseView*>(RiaApplication::instance()->activeReservoirView());
const caf::ColorTable& colorTable = RiaColorTables::wellsPaletteColors(); if (activeView)
for ( size_t wIdx = 0; wIdx < wellResults.size(); ++wIdx )
{ {
if ( wellResults[wIdx]->m_wellName == tracerName ) RimEclipseWell* well = activeView->wellCollection->findWell(tracerName);
if (well)
{ {
return colorTable.cycledColor3f(wIdx); return well->wellPipeColor();
}
}
else
{
// If we do not find a well color, use index in well result data to be able to get variation of tracer colors
// This can be the case if we do not have any views at all
const cvf::Collection<RigSingleWellResultsData>& wellResults = eclCase->reservoirData()->wellResults();
for ( size_t wIdx = 0; wIdx < wellResults.size(); ++wIdx )
{
if ( wellResults[wIdx]->m_wellName == tracerName )
{
return RiaColorTables::wellsPaletteColors().cycledColor3f(wIdx);
}
} }
} }
} }

View File

@ -281,7 +281,16 @@ void RimEclipseCellColors::updateLegendData(size_t currentTimeStep)
if (this->hasCategoryResult()) if (this->hasCategoryResult())
{ {
this->legendConfig()->setNamedCategories(this->flowDiagSolution()->tracerNames()); std::vector<cvf::Color3ub> categoryColors;
std::vector<QString> tracerNames = this->flowDiagSolution()->tracerNames();
for (const auto& tracerName : tracerNames)
{
categoryColors.push_back(cvf::Color3ub(this->flowDiagSolution()->tracerColor(tracerName)));
}
this->legendConfig()->setNamedCategories(tracerNames);
this->legendConfig()->setCategoryColors(categoryColors);
} }
} }
else else

View File

@ -308,7 +308,15 @@ void RimLegendConfig::updateLegend()
break; break;
case CATEGORY_INTEGER: case CATEGORY_INTEGER:
m_categoryMapper->setCategoriesWithNames(m_categories, m_categoryNames); m_categoryMapper->setCategoriesWithNames(m_categories, m_categoryNames);
m_categoryMapper->setInterpolateColors(legendColors);
if (m_categoryColors.size() > 0)
{
m_categoryMapper->setCycleColors(m_categoryColors);
}
else
{
m_categoryMapper->setInterpolateColors(legendColors);
}
m_currentScalarMapper = m_categoryMapper.p(); m_currentScalarMapper = m_categoryMapper.p();
break; break;
default: default:
@ -570,6 +578,7 @@ void RimLegendConfig::setIntegerCategories(const std::vector<int>& categories)
{ {
m_categories = categories; m_categories = categories;
m_categoryNames.clear(); m_categoryNames.clear();
m_categoryColors.clear();
updateLegend(); updateLegend();
} }
@ -589,6 +598,7 @@ void RimLegendConfig::setNamedCategoriesInverse(const std::vector<QString>& cate
m_categories = nameIndices; m_categories = nameIndices;
m_categoryNames = names; m_categoryNames = names;
m_categoryColors.clear();
updateLegend(); updateLegend();
} }
@ -609,10 +619,23 @@ void RimLegendConfig::setNamedCategories(const std::vector<QString>& categoryNam
m_categories = nameIndices; m_categories = nameIndices;
m_categoryNames = names; m_categoryNames = names;
m_categoryColors.clear();
updateLegend(); updateLegend();
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimLegendConfig::setCategoryColors(const std::vector<cvf::Color3ub>& categoryColors)
{
if (m_categoryNames.size() == categoryColors.size())
{
m_categoryColors = cvf::Color3ubArray(categoryColors);
updateLegend();
}
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -108,6 +108,7 @@ public:
void setIntegerCategories(const std::vector<int>& categories); void setIntegerCategories(const std::vector<int>& categories);
void setNamedCategoriesInverse(const std::vector<QString>& categoryNames); void setNamedCategoriesInverse(const std::vector<QString>& categoryNames);
void setNamedCategories(const std::vector<QString>& categoryNames); void setNamedCategories(const std::vector<QString>& categoryNames);
void setCategoryColors(const std::vector<cvf::Color3ub>& categoryColors);
void setTitle(const cvf::String& title); void setTitle(const cvf::String& title);
@ -156,6 +157,7 @@ private:
std::vector<int> m_categories; std::vector<int> m_categories;
std::vector<cvf::String> m_categoryNames; std::vector<cvf::String> m_categoryNames;
cvf::Color3ubArray m_categoryColors;
// Fields // Fields
caf::PdmField<int> m_numLevels; caf::PdmField<int> m_numLevels;