2015-08-25 05:40:55 -05:00
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
//
|
|
|
|
// Copyright (C) 2015- Statoil ASA
|
|
|
|
// Copyright (C) 2015- Ceetron Solutions AS
|
|
|
|
//
|
|
|
|
// 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.
|
|
|
|
//
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
2015-09-01 10:14:22 -05:00
|
|
|
#include "RimLinkedViews.h"
|
2015-08-25 05:40:55 -05:00
|
|
|
|
2015-09-01 10:14:22 -05:00
|
|
|
#include "RiaApplication.h"
|
|
|
|
|
|
|
|
#include "RimCase.h"
|
2015-08-25 05:40:55 -05:00
|
|
|
#include "RimEclipseCellColors.h"
|
|
|
|
#include "RimEclipseResultDefinition.h"
|
|
|
|
#include "RimEclipseView.h"
|
2015-09-01 10:14:22 -05:00
|
|
|
#include "RimGeoMechCellColors.h"
|
|
|
|
#include "RimGeoMechResultDefinition.h"
|
|
|
|
#include "RimGeoMechView.h"
|
2015-08-25 05:40:55 -05:00
|
|
|
#include "RimManagedViewConfig.h"
|
2015-09-01 10:14:22 -05:00
|
|
|
#include "RimProject.h"
|
2015-08-25 05:40:55 -05:00
|
|
|
#include "RimView.h"
|
|
|
|
|
|
|
|
#include "RiuViewer.h"
|
|
|
|
|
|
|
|
#include "cvfCamera.h"
|
|
|
|
#include "cvfMatrix4.h"
|
2015-09-01 10:14:22 -05:00
|
|
|
#include "cafPdmUiTreeOrdering.h"
|
2015-08-25 05:40:55 -05:00
|
|
|
|
|
|
|
|
|
|
|
|
2015-09-01 10:14:22 -05:00
|
|
|
CAF_PDM_SOURCE_INIT(RimLinkedViews, "RimLinkedViews");
|
2015-08-25 05:40:55 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2015-09-01 10:14:22 -05:00
|
|
|
RimLinkedViews::RimLinkedViews(void)
|
2015-08-25 05:40:55 -05:00
|
|
|
{
|
2015-09-02 06:44:56 -05:00
|
|
|
CAF_PDM_InitObject("Linked Views", "", "", "");
|
2015-09-01 10:14:22 -05:00
|
|
|
|
2015-09-02 06:44:56 -05:00
|
|
|
CAF_PDM_InitField(&m_name, "Name", QString("View Group Name"), "View Group Name", "", "", "");
|
|
|
|
m_name.uiCapability()->setUiHidden(true);
|
2015-09-01 10:14:22 -05:00
|
|
|
|
2015-09-02 06:44:56 -05:00
|
|
|
CAF_PDM_InitFieldNoDefault(&m_mainView, "MainView", "Main View", "", "", "");
|
|
|
|
m_mainView.uiCapability()->setUiChildrenHidden(true);
|
|
|
|
m_mainView.uiCapability()->setUiHidden(true);
|
2015-08-25 05:40:55 -05:00
|
|
|
|
2015-08-31 05:31:38 -05:00
|
|
|
CAF_PDM_InitFieldNoDefault(&viewConfigs, "ManagedViews", "Managed Views", "", "", "");
|
|
|
|
viewConfigs.uiCapability()->setUiHidden(true);
|
2015-08-25 05:40:55 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2015-09-01 10:14:22 -05:00
|
|
|
RimLinkedViews::~RimLinkedViews(void)
|
2015-08-25 05:40:55 -05:00
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2015-09-01 10:14:22 -05:00
|
|
|
void RimLinkedViews::updateTimeStep(RimView* sourceView, int timeStep)
|
2015-08-25 05:40:55 -05:00
|
|
|
{
|
2015-09-01 10:14:22 -05:00
|
|
|
RimManagedViewConfig* sourceViewConfig = viewConfigForView(sourceView);
|
|
|
|
if (sourceViewConfig && !sourceViewConfig->syncTimeStep())
|
|
|
|
{
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2015-09-02 06:44:56 -05:00
|
|
|
if (sourceView && sourceView != m_mainView)
|
2015-09-01 10:14:22 -05:00
|
|
|
{
|
2015-09-02 06:44:56 -05:00
|
|
|
m_mainView->viewer()->setCurrentFrame(timeStep);
|
2015-09-01 10:14:22 -05:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2015-09-02 06:44:56 -05:00
|
|
|
m_mainView->viewer()->setCurrentFrame(timeStep);
|
2015-09-01 10:14:22 -05:00
|
|
|
}
|
|
|
|
|
2015-08-31 05:31:38 -05:00
|
|
|
for (size_t i = 0; i < viewConfigs.size(); i++)
|
2015-08-25 05:40:55 -05:00
|
|
|
{
|
2015-08-31 05:31:38 -05:00
|
|
|
RimManagedViewConfig* managedViewConfig = viewConfigs[i];
|
2015-09-01 10:14:22 -05:00
|
|
|
if (managedViewConfig->managedView() && managedViewConfig->managedView() != sourceView)
|
2015-08-25 05:40:55 -05:00
|
|
|
{
|
|
|
|
if (managedViewConfig->syncTimeStep() && managedViewConfig->managedView()->viewer())
|
|
|
|
{
|
2015-09-01 10:14:22 -05:00
|
|
|
managedViewConfig->managedView()->viewer()->setCurrentFrame(timeStep);
|
2015-08-25 05:40:55 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2015-09-01 10:14:22 -05:00
|
|
|
void RimLinkedViews::updateCellResult()
|
2015-08-25 05:40:55 -05:00
|
|
|
{
|
2015-09-02 06:44:56 -05:00
|
|
|
RimView* rimView = m_mainView;
|
2015-09-01 10:14:22 -05:00
|
|
|
RimEclipseView* masterEclipseView = dynamic_cast<RimEclipseView*>(rimView);
|
2015-08-27 07:57:04 -05:00
|
|
|
if (masterEclipseView && masterEclipseView->cellResult())
|
2015-08-25 05:40:55 -05:00
|
|
|
{
|
2015-08-27 07:57:04 -05:00
|
|
|
RimEclipseResultDefinition* eclipseCellResultDefinition = masterEclipseView->cellResult();
|
|
|
|
|
2015-08-31 05:31:38 -05:00
|
|
|
for (size_t i = 0; i < viewConfigs.size(); i++)
|
2015-08-25 05:40:55 -05:00
|
|
|
{
|
2015-08-31 05:31:38 -05:00
|
|
|
RimManagedViewConfig* managedViewConfig = viewConfigs[i];
|
2015-08-27 07:57:04 -05:00
|
|
|
if (managedViewConfig->managedView())
|
2015-08-25 05:40:55 -05:00
|
|
|
{
|
2015-08-27 07:57:04 -05:00
|
|
|
if (managedViewConfig->syncCellResult())
|
|
|
|
{
|
|
|
|
RimView* rimView = managedViewConfig->managedView();
|
|
|
|
RimEclipseView* eclipeView = dynamic_cast<RimEclipseView*>(rimView);
|
|
|
|
if (eclipeView)
|
|
|
|
{
|
|
|
|
eclipeView->cellResult()->setPorosityModel(eclipseCellResultDefinition->porosityModel());
|
|
|
|
eclipeView->cellResult()->setResultType(eclipseCellResultDefinition->resultType());
|
|
|
|
eclipeView->cellResult()->setResultVariable(eclipseCellResultDefinition->resultVariable());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2015-09-01 10:14:22 -05:00
|
|
|
RimGeoMechView* masterGeoView = dynamic_cast<RimGeoMechView*>(rimView);
|
2015-08-27 07:57:04 -05:00
|
|
|
if (masterGeoView && masterGeoView->cellResult())
|
|
|
|
{
|
|
|
|
RimGeoMechResultDefinition* geoMechResultDefinition = masterGeoView->cellResult();
|
|
|
|
|
2015-08-31 05:31:38 -05:00
|
|
|
for (size_t i = 0; i < viewConfigs.size(); i++)
|
2015-08-27 07:57:04 -05:00
|
|
|
{
|
2015-08-31 05:31:38 -05:00
|
|
|
RimManagedViewConfig* managedViewConfig = viewConfigs[i];
|
2015-08-27 07:57:04 -05:00
|
|
|
if (managedViewConfig->managedView())
|
|
|
|
{
|
|
|
|
if (managedViewConfig->syncCellResult())
|
2015-08-25 05:40:55 -05:00
|
|
|
{
|
2015-08-27 07:57:04 -05:00
|
|
|
RimView* rimView = managedViewConfig->managedView();
|
|
|
|
RimGeoMechView* geoView = dynamic_cast<RimGeoMechView*>(rimView);
|
|
|
|
if (geoView)
|
|
|
|
{
|
|
|
|
geoView->cellResult()->setResultAddress(geoMechResultDefinition->resultAddress());
|
|
|
|
geoView->scheduleCreateDisplayModelAndRedraw();
|
|
|
|
}
|
2015-08-25 05:40:55 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2015-08-27 06:44:27 -05:00
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2015-09-01 10:14:22 -05:00
|
|
|
void RimLinkedViews::updateRangeFilters()
|
2015-08-27 06:44:27 -05:00
|
|
|
{
|
2015-08-31 05:31:38 -05:00
|
|
|
for (size_t i = 0; i < viewConfigs.size(); i++)
|
2015-08-27 06:44:27 -05:00
|
|
|
{
|
2015-08-31 05:31:38 -05:00
|
|
|
RimManagedViewConfig* managedViewConfig = viewConfigs[i];
|
2015-08-27 06:44:27 -05:00
|
|
|
if (managedViewConfig->managedView())
|
|
|
|
{
|
|
|
|
if (managedViewConfig->syncRangeFilters())
|
|
|
|
{
|
|
|
|
RimView* rimView = managedViewConfig->managedView();
|
|
|
|
RimEclipseView* eclipeView = dynamic_cast<RimEclipseView*>(rimView);
|
|
|
|
if (eclipeView)
|
|
|
|
{
|
|
|
|
eclipeView->scheduleGeometryRegen(RANGE_FILTERED);
|
|
|
|
eclipeView->scheduleGeometryRegen(RANGE_FILTERED_INACTIVE);
|
|
|
|
|
|
|
|
eclipeView->scheduleCreateDisplayModelAndRedraw();
|
|
|
|
}
|
2015-08-27 07:57:04 -05:00
|
|
|
|
|
|
|
RimGeoMechView* geoView = dynamic_cast<RimGeoMechView*>(rimView);
|
|
|
|
if (geoView)
|
|
|
|
{
|
|
|
|
geoView->scheduleGeometryRegen(RANGE_FILTERED);
|
|
|
|
geoView->scheduleGeometryRegen(RANGE_FILTERED_INACTIVE);
|
|
|
|
|
|
|
|
geoView->scheduleCreateDisplayModelAndRedraw();
|
|
|
|
}
|
2015-08-27 06:44:27 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2015-08-27 08:45:22 -05:00
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2015-09-01 10:14:22 -05:00
|
|
|
void RimLinkedViews::updatePropertyFilters()
|
2015-08-27 08:45:22 -05:00
|
|
|
{
|
2015-08-31 05:31:38 -05:00
|
|
|
for (size_t i = 0; i < viewConfigs.size(); i++)
|
2015-08-27 08:45:22 -05:00
|
|
|
{
|
2015-08-31 05:31:38 -05:00
|
|
|
RimManagedViewConfig* managedViewConfig = viewConfigs[i];
|
2015-08-27 08:45:22 -05:00
|
|
|
if (managedViewConfig->managedView())
|
|
|
|
{
|
|
|
|
if (managedViewConfig->syncPropertyFilters())
|
|
|
|
{
|
|
|
|
RimView* rimView = managedViewConfig->managedView();
|
|
|
|
RimEclipseView* eclipeView = dynamic_cast<RimEclipseView*>(rimView);
|
|
|
|
if (eclipeView)
|
|
|
|
{
|
2015-09-01 10:14:22 -05:00
|
|
|
eclipeView->scheduleGeometryRegen(PROPERTY_FILTERED);
|
2015-08-28 01:01:40 -05:00
|
|
|
|
2015-08-27 08:45:22 -05:00
|
|
|
eclipeView->scheduleCreateDisplayModelAndRedraw();
|
|
|
|
}
|
|
|
|
|
|
|
|
RimGeoMechView* geoView = dynamic_cast<RimGeoMechView*>(rimView);
|
|
|
|
if (geoView)
|
|
|
|
{
|
2015-08-28 01:01:40 -05:00
|
|
|
geoView->scheduleGeometryRegen(PROPERTY_FILTERED);
|
2015-08-27 08:45:22 -05:00
|
|
|
|
|
|
|
geoView->scheduleCreateDisplayModelAndRedraw();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2015-08-28 01:01:40 -05:00
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2015-09-01 10:14:22 -05:00
|
|
|
void RimLinkedViews::configureOverrides()
|
2015-08-28 01:01:40 -05:00
|
|
|
{
|
2015-08-31 05:31:38 -05:00
|
|
|
for (size_t i = 0; i < viewConfigs.size(); i++)
|
2015-08-28 01:01:40 -05:00
|
|
|
{
|
2015-08-31 05:31:38 -05:00
|
|
|
RimManagedViewConfig* managedViewConfig = viewConfigs[i];
|
2015-08-28 01:06:35 -05:00
|
|
|
managedViewConfig->configureOverrides();
|
2015-08-28 01:01:40 -05:00
|
|
|
}
|
|
|
|
}
|
2015-08-28 14:05:56 -05:00
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2015-09-01 10:14:22 -05:00
|
|
|
void RimLinkedViews::allViewsForCameraSync(std::vector<RimView*>& views)
|
2015-08-28 14:05:56 -05:00
|
|
|
{
|
2015-09-02 06:44:56 -05:00
|
|
|
views.push_back(m_mainView());
|
2015-09-01 10:14:22 -05:00
|
|
|
|
2015-08-31 05:31:38 -05:00
|
|
|
for (size_t i = 0; i < viewConfigs.size(); i++)
|
2015-08-28 14:05:56 -05:00
|
|
|
{
|
2015-08-31 05:31:38 -05:00
|
|
|
if (viewConfigs[i]->syncCamera && viewConfigs[i]->managedView())
|
|
|
|
{
|
|
|
|
views.push_back(viewConfigs[i]->managedView());
|
|
|
|
}
|
2015-08-28 14:05:56 -05:00
|
|
|
}
|
|
|
|
}
|
2015-08-30 06:30:46 -05:00
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2015-09-01 10:14:22 -05:00
|
|
|
void RimLinkedViews::applyAllOperations()
|
2015-08-30 06:30:46 -05:00
|
|
|
{
|
|
|
|
configureOverrides();
|
|
|
|
|
|
|
|
updateCellResult();
|
2015-09-02 06:44:56 -05:00
|
|
|
updateTimeStep(NULL, m_mainView->currentTimeStep());
|
2015-08-30 06:30:46 -05:00
|
|
|
updateRangeFilters();
|
|
|
|
updatePropertyFilters();
|
|
|
|
}
|
2015-09-01 10:14:22 -05:00
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
QList<caf::PdmOptionItemInfo> RimLinkedViews::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly)
|
|
|
|
{
|
|
|
|
QList<caf::PdmOptionItemInfo> optionList;
|
|
|
|
|
2015-09-02 06:44:56 -05:00
|
|
|
if (fieldNeedingOptions == &m_mainView)
|
2015-09-01 10:14:22 -05:00
|
|
|
{
|
|
|
|
RimProject* proj = RiaApplication::instance()->project();
|
|
|
|
std::vector<RimView*> views;
|
|
|
|
proj->allVisibleViews(views);
|
|
|
|
|
|
|
|
for (size_t i = 0; i < views.size(); i++)
|
|
|
|
{
|
|
|
|
optionList.push_back(caf::PdmOptionItemInfo(displayNameForView(views[i]), QVariant::fromValue(caf::PdmPointer<caf::PdmObjectHandle>(views[i]))));
|
|
|
|
}
|
|
|
|
|
|
|
|
if (optionList.size() > 0)
|
|
|
|
{
|
|
|
|
optionList.push_front(caf::PdmOptionItemInfo("None", QVariant::fromValue(caf::PdmPointer<caf::PdmObjectHandle>(NULL))));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return optionList;
|
|
|
|
}
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
QString RimLinkedViews::displayNameForView(RimView* view)
|
|
|
|
{
|
|
|
|
RimCase* rimCase = NULL;
|
|
|
|
view->firstAnchestorOrThisOfType(rimCase);
|
|
|
|
|
|
|
|
QString displayName = rimCase->caseUserDescription() + " : " + view->name;
|
|
|
|
|
|
|
|
return displayName;
|
|
|
|
}
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
void RimLinkedViews::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName /*= ""*/)
|
|
|
|
{
|
|
|
|
for (size_t cIdx = 0; cIdx < viewConfigs.size(); ++cIdx)
|
|
|
|
{
|
|
|
|
PdmObjectHandle* childObject = viewConfigs[cIdx];
|
|
|
|
if (childObject)
|
|
|
|
{
|
|
|
|
uiTreeOrdering.add(childObject);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
uiTreeOrdering.setForgetRemainingFields(true);
|
|
|
|
}
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
RimManagedViewConfig* RimLinkedViews::viewConfigForView(RimView* view)
|
|
|
|
{
|
|
|
|
for (size_t i = 0; i < viewConfigs.size(); i++)
|
|
|
|
{
|
|
|
|
if (viewConfigs[i]->managedView() == view) return viewConfigs[i];
|
|
|
|
}
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
2015-09-02 01:13:17 -05:00
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2015-09-02 06:44:56 -05:00
|
|
|
void RimLinkedViews::setMainView(RimView* view)
|
2015-09-02 01:13:17 -05:00
|
|
|
{
|
2015-09-02 06:44:56 -05:00
|
|
|
m_mainView = view;
|
|
|
|
|
|
|
|
m_name = displayNameForView(view);
|
|
|
|
|
|
|
|
this->uiCapability()->setUiIcon(view->uiCapability()->uiIcon());
|
2015-09-02 01:13:17 -05:00
|
|
|
}
|
2015-09-02 06:44:56 -05:00
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
RimView* RimLinkedViews::mainView()
|
|
|
|
{
|
|
|
|
return m_mainView;
|
|
|
|
}
|
|
|
|
|