2016-12-09 03:01:50 -06:00
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
//
|
|
|
|
// 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 "RimMultiSnapshotDefinition.h"
|
|
|
|
|
2016-12-09 07:40:26 -06:00
|
|
|
#include "RiaApplication.h"
|
2016-12-15 03:38:26 -06:00
|
|
|
|
|
|
|
#include "RigActiveCellInfo.h"
|
|
|
|
|
2016-12-09 07:40:26 -06:00
|
|
|
#include "RimCase.h"
|
2016-12-15 03:38:26 -06:00
|
|
|
#include "RimCellRangeFilterCollection.h"
|
2016-12-09 07:40:26 -06:00
|
|
|
#include "RimProject.h"
|
|
|
|
#include "RimView.h"
|
|
|
|
|
|
|
|
#include "cafPdmPointer.h"
|
|
|
|
|
2016-12-13 02:52:05 -06:00
|
|
|
namespace caf
|
|
|
|
{
|
|
|
|
template<>
|
|
|
|
void caf::AppEnum< RimMultiSnapshotDefinition::SnapShotDirectionEnum >::setUp()
|
|
|
|
{
|
|
|
|
addItem(RimMultiSnapshotDefinition::RANGEFILTER_I, "I", "i-direction");
|
|
|
|
addItem(RimMultiSnapshotDefinition::RANGEFILTER_J, "J", "j-direction");
|
|
|
|
addItem(RimMultiSnapshotDefinition::RANGEFILTER_K, "K", "k-direction");
|
2016-12-14 02:16:44 -06:00
|
|
|
addItem(RimMultiSnapshotDefinition::NO_RANGEFILTER, "None", "None");
|
2016-12-13 02:52:05 -06:00
|
|
|
|
|
|
|
setDefault(RimMultiSnapshotDefinition::RANGEFILTER_K);
|
|
|
|
}
|
|
|
|
}
|
2016-12-09 03:01:50 -06:00
|
|
|
|
|
|
|
CAF_PDM_SOURCE_INIT(RimMultiSnapshotDefinition, "MultiSnapshotDefinition");
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
RimMultiSnapshotDefinition::RimMultiSnapshotDefinition()
|
|
|
|
{
|
|
|
|
//CAF_PDM_InitObject("MultiSnapshotDefinition", ":/Well.png", "", "");
|
|
|
|
CAF_PDM_InitObject("MultiSnapshotDefinition", "", "", "");
|
|
|
|
|
2016-12-09 04:11:16 -06:00
|
|
|
CAF_PDM_InitFieldNoDefault(&viewObject, "View", "View", "", "", "");
|
|
|
|
CAF_PDM_InitField(&timeStepStart, "TimeStepStart", 0, "Timestep Start", "", "", "");
|
|
|
|
CAF_PDM_InitField(&timeStepEnd, "TimeStepEnd", 0, "Timestep End", "", "", "");
|
2016-12-13 02:52:05 -06:00
|
|
|
|
2016-12-19 08:06:20 -06:00
|
|
|
CAF_PDM_InitField(&sliceDirection, "SnapShotDirection", caf::AppEnum<SnapShotDirectionEnum>(NO_RANGEFILTER), "Range Filter direction", "", "", "");
|
|
|
|
CAF_PDM_InitField(&startSliceIndex, "RangeFilterStart", 1, "RangeFilter Start", "", "", "");
|
|
|
|
CAF_PDM_InitField(&endSliceIndex, "RangeFilterEnd", 1, "RangeFilter End", "", "", "");
|
2016-12-13 02:52:05 -06:00
|
|
|
|
2016-12-19 08:06:20 -06:00
|
|
|
CAF_PDM_InitFieldNoDefault(&additionalCases, "AdditionalCases", "Additional Cases", "", "", "");
|
2016-12-09 03:01:50 -06:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
RimMultiSnapshotDefinition::~RimMultiSnapshotDefinition()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
2016-12-09 07:40:26 -06:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
QList<caf::PdmOptionItemInfo> RimMultiSnapshotDefinition::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly)
|
|
|
|
{
|
|
|
|
QList<caf::PdmOptionItemInfo> options;
|
|
|
|
|
|
|
|
RimProject* proj = RiaApplication::instance()->project();
|
|
|
|
|
2016-12-19 01:49:41 -06:00
|
|
|
if (fieldNeedingOptions == &viewObject)
|
2016-12-09 07:40:26 -06:00
|
|
|
{
|
2016-12-19 01:49:41 -06:00
|
|
|
std::vector<RimView*> views;
|
|
|
|
|
|
|
|
RimProject* proj = RiaApplication::instance()->project();
|
2016-12-09 07:40:26 -06:00
|
|
|
std::vector<RimCase*> cases;
|
|
|
|
proj->allCases(cases);
|
|
|
|
|
2016-12-19 01:49:41 -06:00
|
|
|
for (RimCase* rimCase : cases)
|
2016-12-09 07:40:26 -06:00
|
|
|
{
|
2016-12-19 01:49:41 -06:00
|
|
|
for (RimView* rimView : rimCase->views())
|
2016-12-09 07:40:26 -06:00
|
|
|
{
|
2016-12-19 01:49:41 -06:00
|
|
|
views.push_back(rimView);
|
2016-12-09 07:40:26 -06:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-12-15 06:45:34 -06:00
|
|
|
for (RimView* view : views)
|
|
|
|
{
|
2016-12-19 01:49:41 -06:00
|
|
|
QString caseAndView = view->ownerCase()->caseUserDescription() + " - " + view->name();
|
|
|
|
options.push_back(caf::PdmOptionItemInfo(caseAndView, view));
|
2016-12-15 06:45:34 -06:00
|
|
|
}
|
2016-12-15 07:22:39 -06:00
|
|
|
options.push_back(caf::PdmOptionItemInfo("-- All views --", nullptr));
|
2016-12-09 07:40:26 -06:00
|
|
|
}
|
2016-12-13 02:52:05 -06:00
|
|
|
else if (fieldNeedingOptions == &timeStepEnd)
|
|
|
|
{
|
2016-12-13 02:58:29 -06:00
|
|
|
getTimeStepStrings(options);
|
2016-12-13 02:52:05 -06:00
|
|
|
}
|
|
|
|
else if (fieldNeedingOptions == &timeStepStart)
|
|
|
|
{
|
2016-12-13 02:58:29 -06:00
|
|
|
getTimeStepStrings(options);
|
2016-12-13 02:52:05 -06:00
|
|
|
}
|
2016-12-19 08:06:20 -06:00
|
|
|
else if (fieldNeedingOptions == &additionalCases)
|
|
|
|
{
|
|
|
|
RimProject* proj = RiaApplication::instance()->project();
|
|
|
|
std::vector<RimCase*> cases;
|
|
|
|
proj->allCases(cases);
|
|
|
|
|
|
|
|
for (RimCase* rimCase : cases)
|
|
|
|
{
|
|
|
|
options.push_back(caf::PdmOptionItemInfo(rimCase->caseUserDescription(), rimCase));
|
|
|
|
}
|
|
|
|
|
|
|
|
if (useOptionsOnly) *useOptionsOnly = true;
|
|
|
|
}
|
2016-12-13 02:52:05 -06:00
|
|
|
|
2016-12-09 07:40:26 -06:00
|
|
|
return options;
|
|
|
|
}
|
2016-12-09 03:01:50 -06:00
|
|
|
|
2016-12-13 02:58:29 -06:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
void RimMultiSnapshotDefinition::getTimeStepStrings(QList<caf::PdmOptionItemInfo> &options)
|
|
|
|
{
|
2016-12-15 06:45:34 -06:00
|
|
|
QStringList timeSteps;
|
|
|
|
|
2016-12-19 01:49:41 -06:00
|
|
|
timeSteps = viewObject->ownerCase()->timeStepStrings();
|
2016-12-15 06:45:34 -06:00
|
|
|
|
2016-12-13 02:58:29 -06:00
|
|
|
for (int i = 0; i < timeSteps.size(); i++)
|
|
|
|
{
|
|
|
|
options.push_back(caf::PdmOptionItemInfo(timeSteps[i], i));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2016-12-15 01:58:11 -06:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
void RimMultiSnapshotDefinition::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue)
|
|
|
|
{
|
2016-12-15 06:45:34 -06:00
|
|
|
|
2016-12-15 01:58:11 -06:00
|
|
|
if (changedField == &sliceDirection)
|
|
|
|
{
|
2016-12-15 03:38:26 -06:00
|
|
|
const cvf::StructGridInterface* mainGrid = nullptr;
|
|
|
|
RigActiveCellInfo* actCellInfo = nullptr;
|
2016-12-19 01:49:41 -06:00
|
|
|
|
2016-12-15 01:58:11 -06:00
|
|
|
if (viewObject())
|
|
|
|
{
|
2016-12-15 03:38:26 -06:00
|
|
|
mainGrid = viewObject()->rangeFilterCollection()->gridByIndex(0);
|
|
|
|
actCellInfo = viewObject()->rangeFilterCollection()->activeCellInfo();
|
|
|
|
}
|
2016-12-15 01:58:11 -06:00
|
|
|
|
2016-12-15 03:38:26 -06:00
|
|
|
if (mainGrid && actCellInfo)
|
|
|
|
{
|
|
|
|
cvf::Vec3st min, max;
|
|
|
|
actCellInfo->IJKBoundingBox(min, max);
|
2016-12-15 01:58:11 -06:00
|
|
|
|
2016-12-15 03:38:26 -06:00
|
|
|
// Adjust to Eclipse indexing
|
|
|
|
min.x() = min.x() + 1;
|
|
|
|
min.y() = min.y() + 1;
|
|
|
|
min.z() = min.z() + 1;
|
2016-12-15 01:58:11 -06:00
|
|
|
|
2016-12-15 03:38:26 -06:00
|
|
|
max.x() = max.x() + 1;
|
|
|
|
max.y() = max.y() + 1;
|
|
|
|
max.z() = max.z() + 1;
|
2016-12-15 01:58:11 -06:00
|
|
|
|
2016-12-15 03:38:26 -06:00
|
|
|
int maxInt = 0;
|
|
|
|
int minInt = 0;
|
2016-12-15 01:58:11 -06:00
|
|
|
|
2016-12-15 03:38:26 -06:00
|
|
|
if (newValue == RimMultiSnapshotDefinition::RANGEFILTER_I)
|
|
|
|
{
|
|
|
|
maxInt = static_cast<int>(max.x());
|
|
|
|
minInt = static_cast<int>(min.x());
|
|
|
|
}
|
|
|
|
else if (newValue == RimMultiSnapshotDefinition::RANGEFILTER_J)
|
|
|
|
{
|
|
|
|
maxInt = static_cast<int>(max.y());
|
|
|
|
minInt = static_cast<int>(min.y());
|
|
|
|
}
|
|
|
|
else if (newValue == RimMultiSnapshotDefinition::RANGEFILTER_K)
|
|
|
|
{
|
|
|
|
maxInt = static_cast<int>(max.z());
|
|
|
|
minInt = static_cast<int>(min.z());
|
|
|
|
}
|
2016-12-15 01:58:11 -06:00
|
|
|
|
2016-12-15 03:38:26 -06:00
|
|
|
startSliceIndex = minInt;
|
|
|
|
endSliceIndex = maxInt;
|
2016-12-15 01:58:11 -06:00
|
|
|
|
2016-12-19 01:49:41 -06:00
|
|
|
}
|
2016-12-15 01:58:11 -06:00
|
|
|
|
|
|
|
startSliceIndex.uiCapability()->updateConnectedEditors();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|