#2544 Well CF Viz : Add basiz viz with spheres, add legend to view

This commit is contained in:
Magne Sjaastad
2018-03-14 09:35:48 +01:00
parent b7e8834b4c
commit 108ef5eecc
18 changed files with 600 additions and 172 deletions

View File

@@ -24,11 +24,15 @@
#include "RiaColorTables.h"
#include "RiaPreferences.h"
#include "CompletionExportCommands/RicWellPathExportCompletionDataFeatureImpl.h"
#include "CompletionExportCommands/RicExportCompletionDataSettingsUi.h"
#include "RigActiveCellInfo.h"
#include "RigCaseCellResultsData.h"
#include "RigEclipseCaseData.h"
#include "RigMainGrid.h"
#include "RigSimWellData.h"
#include "RigVirtualPerforationTransmissibilities.h"
#include "Rim2dIntersectionViewCollection.h"
#include "RimCaseCollection.h"
@@ -43,8 +47,10 @@
#include "RimFlowPlotCollection.h"
#include "RimFormationNames.h"
#include "RimIntersectionCollection.h"
#include "RimLegendConfig.h"
#include "RimMainPlotCollection.h"
#include "RimOilField.h"
#include "RimPerforationCollection.h"
#include "RimProject.h"
#include "RimReservoirCellResultsStorage.h"
#include "RimStimPlanColors.h"
@@ -53,6 +59,7 @@
#include "RimSummaryPlot.h"
#include "RimSummaryPlotCollection.h"
#include "RimTools.h"
#include "RimVirtualPerforationResults.h"
#include "RimWellAllocationPlot.h"
#include "RimWellLogPlot.h"
#include "RimWellLogPlotCollection.h"
@@ -307,6 +314,120 @@ void RimEclipseCase::recalculateCompletionTypeAndRedrawAllViews()
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEclipseCase::deleteVirtualConnectionFactorDataAndRedrawRequiredViews()
{
RigEclipseCaseData* rigEclipseCase = eclipseCaseData();
if (rigEclipseCase)
{
rigEclipseCase->setVirtualPerforationTransmissibilities(nullptr);
}
for (Rim3dView* view : views())
{
RimEclipseView* eclipseView = dynamic_cast<RimEclipseView*>(view);
if (eclipseView && eclipseView->isVirtualConnectionFactorGeometryVisible())
{
eclipseView->scheduleCreateDisplayModelAndRedraw();
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
const RigVirtualPerforationTransmissibilities* RimEclipseCase::computeAndGetVirtualPerforationTransmissibilities()
{
RigEclipseCaseData* rigEclipseCase = eclipseCaseData();
// TODO: Remove
rigEclipseCase->setVirtualPerforationTransmissibilities(nullptr);
if (rigEclipseCase->virtualPerforationTransmissibilities() == nullptr)
{
cvf::ref<RigVirtualPerforationTransmissibilities> perfTrans = new RigVirtualPerforationTransmissibilities;
std::vector<RimWellPath*> visibleWellPaths;
bool anyPerforationsPresent = false;
{
RimProject* proj = RiaApplication::instance()->project();
std::vector<RimWellPath*> wellPaths = proj->allWellPaths();
for (auto w : wellPaths)
{
if (w->showWellPath())
{
visibleWellPaths.push_back(w);
if (!w->perforationIntervalCollection()->perforations().empty())
{
anyPerforationsPresent = true;
}
}
}
}
for (auto w : visibleWellPaths)
{
std::vector<RigCompletionData> staticCompletionData = RicWellPathExportCompletionDataFeatureImpl::computeStaticCompletionsForWellPath(w, this);
if (anyPerforationsPresent)
{
std::vector<std::vector<RigCompletionData>> allCompletionData;
for (size_t i = 0; i < timeStepDates().size(); i++)
{
std::vector<RigCompletionData> dynamicCompletionDataOneTimeStep = RicWellPathExportCompletionDataFeatureImpl::computeDynamicCompletionsForWellPath(w, this, i);
std::copy(staticCompletionData.begin(), staticCompletionData.end(), std::back_inserter(dynamicCompletionDataOneTimeStep));
allCompletionData.push_back(dynamicCompletionDataOneTimeStep);
}
perfTrans->setCompletionDataForWellPath(w, allCompletionData);
}
else
{
std::vector<std::vector<RigCompletionData>> allCompletionData;
allCompletionData.push_back(staticCompletionData);
perfTrans->setCompletionDataForWellPath(w, allCompletionData);
}
}
rigEclipseCase->setVirtualPerforationTransmissibilities(perfTrans.p());
{
double minValue = HUGE_VAL;
double maxValue = -HUGE_VAL;
double posClosestToZero = HUGE_VAL;
double negClosestToZero = -HUGE_VAL;
perfTrans->computeMinMax(&minValue, &maxValue, &posClosestToZero, &negClosestToZero);
if (minValue != HUGE_VAL)
{
for (const auto& v : views())
{
RimEclipseView* eclView = dynamic_cast<RimEclipseView*>(v);
if (eclView)
{
RimLegendConfig* legendConfig = eclView->virtualPerforationResult()->legendConfig();
legendConfig->setAutomaticRanges(minValue, maxValue, minValue, maxValue);
legendConfig->setClosestToZeroValues(posClosestToZero, negClosestToZero, posClosestToZero, negClosestToZero);
}
}
}
}
}
return rigEclipseCase->virtualPerforationTransmissibilities();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------