From f6ac177ff20c3f59eb4e12d248771a0a8e353cca Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Tue, 25 Aug 2015 12:40:55 +0200 Subject: [PATCH] Added ManagedViews and sync of camera, time step and cell result --- .../RicToggleItemsFeatureImpl.cpp | 1 + .../ProjectDataModel/CMakeLists_files.cmake | 4 + .../ProjectDataModel/RimConnectedViews.cpp | 95 ++++++++++++++ .../ProjectDataModel/RimConnectedViews.h | 48 +++++++ .../RimEclipseResultDefinition.cpp | 20 ++- .../RimManagedViewCollection.cpp | 118 ++++++++++++++++++ .../RimManagedViewCollection.h | 49 ++++++++ .../ProjectDataModel/RimManagedViewConfig.cpp | 117 +++++++++++++++++ .../ProjectDataModel/RimManagedViewConfig.h | 52 ++++++++ .../ProjectDataModel/RimProject.cpp | 37 ++++-- ApplicationCode/ProjectDataModel/RimProject.h | 1 + ApplicationCode/ProjectDataModel/RimView.cpp | 25 ++-- ApplicationCode/ProjectDataModel/RimView.h | 10 +- ApplicationCode/Resources/ResInsight.qrc | 3 +- ApplicationCode/Resources/chain.png | Bin 0 -> 5177 bytes ApplicationCode/UserInterface/RiuViewer.cpp | 21 ++++ ApplicationCode/UserInterface/RiuViewer.h | 2 + 17 files changed, 580 insertions(+), 23 deletions(-) create mode 100644 ApplicationCode/ProjectDataModel/RimConnectedViews.cpp create mode 100644 ApplicationCode/ProjectDataModel/RimConnectedViews.h create mode 100644 ApplicationCode/ProjectDataModel/RimManagedViewCollection.cpp create mode 100644 ApplicationCode/ProjectDataModel/RimManagedViewCollection.h create mode 100644 ApplicationCode/ProjectDataModel/RimManagedViewConfig.cpp create mode 100644 ApplicationCode/ProjectDataModel/RimManagedViewConfig.h create mode 100644 ApplicationCode/Resources/chain.png diff --git a/ApplicationCode/Commands/ToggleCommands/RicToggleItemsFeatureImpl.cpp b/ApplicationCode/Commands/ToggleCommands/RicToggleItemsFeatureImpl.cpp index 93e4e99635..e41390c543 100644 --- a/ApplicationCode/Commands/ToggleCommands/RicToggleItemsFeatureImpl.cpp +++ b/ApplicationCode/Commands/ToggleCommands/RicToggleItemsFeatureImpl.cpp @@ -38,6 +38,7 @@ bool RicToggleItemsFeatureImpl::isToggleCommandsAvailable() caf::PdmUiObjectHandle* uiObjectHandle = dynamic_cast(selectedItems[0]); QModelIndex modIndex = RiuMainWindow::instance()->projectTreeView()->findModelIndex(selectedItems[0]); caf::PdmUiTreeOrdering* treeItem = static_cast(modIndex.internalPointer()); + if (!treeItem) return false; for (int cIdx = 0; cIdx < treeItem->childCount(); ++ cIdx) { diff --git a/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake b/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake index 5877a4c0a7..027cc9d6b3 100644 --- a/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake +++ b/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake @@ -59,6 +59,8 @@ ${CEE_CURRENT_LIST_DIR}RimGeoMechCellColors.h ${CEE_CURRENT_LIST_DIR}RimView.h ${CEE_CURRENT_LIST_DIR}RimCase.h ${CEE_CURRENT_LIST_DIR}RimTreeViewStateSerializer.h +${CEE_CURRENT_LIST_DIR}RimManagedViewConfig.h +${CEE_CURRENT_LIST_DIR}RimManagedViewCollection.h ) set (SOURCE_GROUP_SOURCE_FILES @@ -116,6 +118,8 @@ ${CEE_CURRENT_LIST_DIR}RimGeoMechCellColors.cpp ${CEE_CURRENT_LIST_DIR}RimView.cpp ${CEE_CURRENT_LIST_DIR}RimCase.cpp ${CEE_CURRENT_LIST_DIR}RimTreeViewStateSerializer.cpp +${CEE_CURRENT_LIST_DIR}RimManagedViewConfig.cpp +${CEE_CURRENT_LIST_DIR}RimManagedViewCollection.cpp ) diff --git a/ApplicationCode/ProjectDataModel/RimConnectedViews.cpp b/ApplicationCode/ProjectDataModel/RimConnectedViews.cpp new file mode 100644 index 0000000000..1d81743235 --- /dev/null +++ b/ApplicationCode/ProjectDataModel/RimConnectedViews.cpp @@ -0,0 +1,95 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// 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 +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RimConnectedViews.h" + +#include "RimView.h" + +#include "cafPdmFieldHandle.h" +#include "RimProject.h" +#include "RiaApplication.h" +#include "RimCase.h" + +CAF_PDM_SOURCE_INIT(RimConnectedViews, "RimConnectedViews"); +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimConnectedViews::RimConnectedViews(void) +{ + CAF_PDM_InitObject("Connected Views", "", "", ""); + + CAF_PDM_InitFieldNoDefault(&masterView, "MasterView", "Master View", "", "", ""); + CAF_PDM_InitFieldNoDefault(&slaveView, "SlaveView", "Slave View", "", "", ""); + +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimConnectedViews::~RimConnectedViews(void) +{ +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QList RimConnectedViews::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly) +{ + QList optionList; + + std::vector views; + allViews(views); + + for (size_t i = 0; i< views.size(); i++) + { + optionList.push_back(caf::PdmOptionItemInfo(views[i]->name(), QVariant::fromValue(caf::PdmPointer(views[i])))); + } + + if (optionList.size() > 0) + { + optionList.push_front(caf::PdmOptionItemInfo("None", QVariant::fromValue(caf::PdmPointer(NULL)))); + } + + return optionList; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimConnectedViews::allViews(std::vector& views) +{ + RimProject* proj = RiaApplication::instance()->project(); + + if (proj) + { + std::vector cases; + proj->allCases(cases); + for (size_t caseIdx = 0; caseIdx < cases.size(); caseIdx++) + { + RimCase* rimCase = cases[caseIdx]; + + std::vector caseViews = rimCase->views(); + for (size_t viewIdx = 0; viewIdx < caseViews.size(); viewIdx++) + { + views.push_back(caseViews[viewIdx]); + } + } + } +} + diff --git a/ApplicationCode/ProjectDataModel/RimConnectedViews.h b/ApplicationCode/ProjectDataModel/RimConnectedViews.h new file mode 100644 index 0000000000..81f6640028 --- /dev/null +++ b/ApplicationCode/ProjectDataModel/RimConnectedViews.h @@ -0,0 +1,48 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// 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 +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "cafPdmObject.h" +#include "cafPdmPtrField.h" + +class RimView; + +//================================================================================================== +/// +/// +//================================================================================================== +class RimConnectedViews : public caf::PdmObject +{ + CAF_PDM_HEADER_INIT; + +public: + RimConnectedViews(void); + virtual ~RimConnectedViews(void); + + caf::PdmPtrField masterView; + caf::PdmPtrField slaveView; + +protected: + virtual QList calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly); + +private: + void allViews(std::vector& views); + +}; diff --git a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp index f72e409d20..855adb2d97 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseResultDefinition.cpp @@ -22,13 +22,17 @@ #include "RigCaseCellResultsData.h" #include "RigCaseData.h" + #include "RimEclipseCase.h" -#include "RimReservoirCellResultsStorage.h" +#include "RimEclipseCellColors.h" +#include "RimEclipseFaultColors.h" +#include "RimEclipsePropertyFilter.h" #include "RimEclipseView.h" +#include "RimManagedViewCollection.h" +#include "RimReservoirCellResultsStorage.h" +#include "RimView.h" #include "cafPdmUiListEditor.h" -#include "RimEclipsePropertyFilter.h" -#include "RimEclipseFaultColors.h" CAF_PDM_SOURCE_INIT(RimEclipseResultDefinition, "ResultDefinition"); @@ -139,6 +143,16 @@ void RimEclipseResultDefinition::fieldChangedByUi(const caf::PdmFieldHandle* cha m_reservoirView->scheduleCreateDisplayModelAndRedraw(); } + if (dynamic_cast(this)) + { + RimView* view = NULL; + this->firstAnchestorOrThisOfType(view); + if (view) + { + view->managedViewCollection->updateResult(this); + } + } + } RimEclipsePropertyFilter* propFilter = dynamic_cast(this->parentField()->ownerObject()); diff --git a/ApplicationCode/ProjectDataModel/RimManagedViewCollection.cpp b/ApplicationCode/ProjectDataModel/RimManagedViewCollection.cpp new file mode 100644 index 0000000000..eeb14079b1 --- /dev/null +++ b/ApplicationCode/ProjectDataModel/RimManagedViewCollection.cpp @@ -0,0 +1,118 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// 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 +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RimManagedViewCollection.h" + +#include "RimEclipseCellColors.h" +#include "RimEclipseResultDefinition.h" +#include "RimEclipseView.h" +#include "RimManagedViewConfig.h" +#include "RimView.h" + +#include "RiuViewer.h" + +#include "cvfCamera.h" +#include "cvfMatrix4.h" + + + +CAF_PDM_SOURCE_INIT(RimManagedViewCollection, "RimManagedViewCollection"); +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimManagedViewCollection::RimManagedViewCollection(void) +{ + CAF_PDM_InitObject("Managed Views", ":/chain.png", "", ""); + + CAF_PDM_InitFieldNoDefault(&managedViews, "ManagedViews", "Managed Views", "", "", ""); + managedViews.push_back(new RimManagedViewConfig); + managedViews.uiCapability()->setUiHidden(true); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimManagedViewCollection::~RimManagedViewCollection(void) +{ +} + + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimManagedViewCollection::updateViewers(RiuViewer* masterViewer) +{ + for (size_t i = 0; i < managedViews.size(); i++) + { + RimManagedViewConfig* managedViewConfig = managedViews[i]; + if (managedViewConfig->managedView()) + { + if (managedViewConfig->syncCamera() && managedViewConfig->managedView()->viewer()) + { + const cvf::Mat4d mat = masterViewer->mainCamera()->viewMatrix(); + + managedViewConfig->managedView()->viewer()->mainCamera()->setViewMatrix(mat); + managedViewConfig->managedView()->viewer()->update(); + } + } + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimManagedViewCollection::updateTimeStep(int timeStep) +{ + for (size_t i = 0; i < managedViews.size(); i++) + { + RimManagedViewConfig* managedViewConfig = managedViews[i]; + if (managedViewConfig->managedView()) + { + if (managedViewConfig->syncTimeStep() && managedViewConfig->managedView()->viewer()) + { + managedViewConfig->managedView()->viewer()->slotSetCurrentFrame(timeStep); + } + } + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimManagedViewCollection::updateResult(RimEclipseResultDefinition* resultDefinition) +{ + for (size_t i = 0; i < managedViews.size(); i++) + { + RimManagedViewConfig* managedViewConfig = managedViews[i]; + if (managedViewConfig->managedView()) + { + if (managedViewConfig->syncCellResult()) + { + RimView* rimView = managedViewConfig->managedView(); + RimEclipseView* eclipeView = dynamic_cast(rimView); + if (eclipeView) + { + eclipeView->cellResult()->setPorosityModel(resultDefinition->porosityModel()); + eclipeView->cellResult()->setResultType(resultDefinition->resultType()); + eclipeView->cellResult()->setResultVariable(resultDefinition->resultVariable()); + } + } + } + } +} diff --git a/ApplicationCode/ProjectDataModel/RimManagedViewCollection.h b/ApplicationCode/ProjectDataModel/RimManagedViewCollection.h new file mode 100644 index 0000000000..d1677b9359 --- /dev/null +++ b/ApplicationCode/ProjectDataModel/RimManagedViewCollection.h @@ -0,0 +1,49 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// 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 +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "RimDefines.h" + +#include "cafPdmChildArrayField.h" +#include "cafPdmField.h" +#include "cafPdmObject.h" + +class RimEclipseResultDefinition; +class RimManagedViewConfig; +class RiuViewer; + +//================================================================================================== +/// +/// +//================================================================================================== +class RimManagedViewCollection : public caf::PdmObject +{ + CAF_PDM_HEADER_INIT; + +public: + RimManagedViewCollection(void); + virtual ~RimManagedViewCollection(void); + + caf::PdmChildArrayField managedViews; + + void updateViewers(RiuViewer* masterViewer); + void updateTimeStep(int timeStep); + void updateResult(RimEclipseResultDefinition* resultDefinition); +}; diff --git a/ApplicationCode/ProjectDataModel/RimManagedViewConfig.cpp b/ApplicationCode/ProjectDataModel/RimManagedViewConfig.cpp new file mode 100644 index 0000000000..5d15f5e24f --- /dev/null +++ b/ApplicationCode/ProjectDataModel/RimManagedViewConfig.cpp @@ -0,0 +1,117 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// 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 +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "RimManagedViewConfig.h" + +#include "RiaApplication.h" + +#include "RimCase.h" +#include "RimProject.h" +#include "RimView.h" + +#include "cafPdmUiTreeOrdering.h" + + +CAF_PDM_SOURCE_INIT(RimManagedViewConfig, "RimManagedViewConfig"); +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimManagedViewConfig::RimManagedViewConfig(void) +{ + CAF_PDM_InitObject("View Config", ":/chain.png", "", ""); + + CAF_PDM_InitFieldNoDefault(&managedView, "ManagedView", "Managed View", "", "", ""); + managedView.uiCapability()->setUiChildrenHidden(true); + + CAF_PDM_InitField(&syncCamera, "SyncCamera", true, "Sync Camera", "", "", ""); + CAF_PDM_InitField(&syncCellResult, "SyncCellResult", true, "Sync Cell Result", "", "", ""); + CAF_PDM_InitField(&syncTimeStep, "SyncTimeStep", true, "Sync Time Step", "", "", ""); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimManagedViewConfig::~RimManagedViewConfig(void) +{ +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QList RimManagedViewConfig::calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly) +{ + QList optionList; + + if (fieldNeedingOptions == &managedView) + { + std::vector views; + allVisibleViews(views); + + for (size_t i = 0; i< views.size(); i++) + { + optionList.push_back(caf::PdmOptionItemInfo(views[i]->name(), QVariant::fromValue(caf::PdmPointer(views[i])))); + } + + if (optionList.size() > 0) + { + optionList.push_front(caf::PdmOptionItemInfo("None", QVariant::fromValue(caf::PdmPointer(NULL)))); + } + } + + return optionList; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimManagedViewConfig::allVisibleViews(std::vector& views) +{ + RimProject* proj = RiaApplication::instance()->project(); + + RimView* masterView = NULL; + firstAnchestorOrThisOfType(masterView); + + if (proj) + { + std::vector cases; + proj->allCases(cases); + for (size_t caseIdx = 0; caseIdx < cases.size(); caseIdx++) + { + RimCase* rimCase = cases[caseIdx]; + + std::vector caseViews = rimCase->views(); + for (size_t viewIdx = 0; viewIdx < caseViews.size(); viewIdx++) + { + if (caseViews[viewIdx]->viewer() && caseViews[viewIdx] != masterView) + { + views.push_back(caseViews[viewIdx]); + } + } + } + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimManagedViewConfig::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName /*= ""*/) +{ + uiTreeOrdering.setForgetRemainingFields(true); +} + diff --git a/ApplicationCode/ProjectDataModel/RimManagedViewConfig.h b/ApplicationCode/ProjectDataModel/RimManagedViewConfig.h new file mode 100644 index 0000000000..de605eab07 --- /dev/null +++ b/ApplicationCode/ProjectDataModel/RimManagedViewConfig.h @@ -0,0 +1,52 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// 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 +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "cafPdmField.h" +#include "cafPdmObject.h" +#include "cafPdmPtrField.h" + +class RimView; + +//================================================================================================== +/// +/// +//================================================================================================== +class RimManagedViewConfig : public caf::PdmObject +{ + CAF_PDM_HEADER_INIT; + +public: + RimManagedViewConfig(void); + virtual ~RimManagedViewConfig(void); + + caf::PdmPtrField managedView; + + caf::PdmField syncCamera; + caf::PdmField syncCellResult; + caf::PdmField syncTimeStep; + +protected: + virtual QList calculateValueOptions(const caf::PdmFieldHandle* fieldNeedingOptions, bool * useOptionsOnly); + virtual void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = ""); + +private: + void allVisibleViews(std::vector& views); +}; diff --git a/ApplicationCode/ProjectDataModel/RimProject.cpp b/ApplicationCode/ProjectDataModel/RimProject.cpp index 0eea6062e7..2f5b44731a 100644 --- a/ApplicationCode/ProjectDataModel/RimProject.cpp +++ b/ApplicationCode/ProjectDataModel/RimProject.cpp @@ -26,34 +26,37 @@ #include "RigCaseData.h" +#include "RiaApplication.h" +#include "RimCalcScript.h" #include "RimCaseCollection.h" #include "RimCommandObject.h" #include "RimEclipseCase.h" #include "RimEclipseCaseCollection.h" +#include "RimEclipseInputProperty.h" +#include "RimEclipseInputPropertyCollection.h" +#include "RimEclipseStatisticsCase.h" +#include "RimEclipseStatisticsCaseCollection.h" #include "RimEclipseView.h" #include "RimGeoMechCase.h" #include "RimGeoMechModels.h" #include "RimIdenticalGridCaseGroup.h" +#include "RimManagedViewCollection.h" +#include "RimManagedViewConfig.h" #include "RimOilField.h" #include "RimScriptCollection.h" #include "RimWellPath.h" #include "RimWellPathCollection.h" #include "RimWellPathImport.h" -#include "RimCalcScript.h" #include "RiuMainWindow.h" -#include "RiaApplication.h" +#include "ToggleCommands/RicToggleItemsFeatureImpl.h" +#include "OctaveScriptCommands/RicExecuteScriptForCasesFeature.h" + +#include "cafCmdFeature.h" #include "cafPdmUiTreeOrdering.h" #include -#include "cafCmdFeature.h" -#include "ToggleCommands/RicToggleItemsFeatureImpl.h" -#include "OctaveScriptCommands/RicExecuteScriptForCasesFeature.h" -#include "RimEclipseStatisticsCaseCollection.h" -#include "RimEclipseStatisticsCase.h" -#include "RimEclipseInputProperty.h" -#include "RimEclipseInputPropertyCollection.h" CAF_PDM_SOURCE_INIT(RimProject, "ResInsightProject"); //-------------------------------------------------------------------------------------------------- @@ -704,6 +707,22 @@ void RimProject::actionsBasedOnSelection(QMenu& contextMenu) commandIds << "RicAddScriptPathFeature"; commandIds << "RicDeleteScriptPathFeature"; } + else if (dynamic_cast(uiItem)) + { + commandIds << "RicDeleteItemFeature"; + } + + if (dynamic_cast(uiItem)) + { + RimManagedViewCollection* viewCollection = dynamic_cast(uiItem); + caf::SelectionManager::instance()->setActiveChildArrayFieldHandle(&viewCollection->managedViews); + + commandIds << "PdmListField_AddItem"; + } + else + { + caf::SelectionManager::instance()->setActiveChildArrayFieldHandle(NULL); + } } if (RicToggleItemsFeatureImpl::isToggleCommandsAvailable()) diff --git a/ApplicationCode/ProjectDataModel/RimProject.h b/ApplicationCode/ProjectDataModel/RimProject.h index 903ad98f6e..40149edc89 100644 --- a/ApplicationCode/ProjectDataModel/RimProject.h +++ b/ApplicationCode/ProjectDataModel/RimProject.h @@ -65,6 +65,7 @@ public: caf::PdmField treeViewState; caf::PdmField currentModelIndexPath; + void setScriptDirectories(const QString& scriptDirectories); QString projectFileVersionString() const; void close(); diff --git a/ApplicationCode/ProjectDataModel/RimView.cpp b/ApplicationCode/ProjectDataModel/RimView.cpp index a256f7258b..52787befa4 100644 --- a/ApplicationCode/ProjectDataModel/RimView.cpp +++ b/ApplicationCode/ProjectDataModel/RimView.cpp @@ -1,24 +1,29 @@ #include "RimView.h" -#include "cafPdmObjectFactory.h" #include "RiaApplication.h" #include "RiaPreferences.h" + #include "Rim3dOverlayInfoConfig.h" -#include "RiuViewer.h" +#include "RimOilField.h" +#include "RimProject.h" +#include "RimManagedViewCollection.h" +#include "RimWellPathCollection.h" + #include "RiuMainWindow.h" +#include "RiuViewer.h" + +#include "RivWellPathCollectionPartMgr.h" + +#include "cafFrameAnimationControl.h" +#include "cafPdmObjectFactory.h" #include "cvfCamera.h" #include "cvfModel.h" #include "cvfModelBasicList.h" #include "cvfPart.h" #include "cvfScene.h" #include "cvfViewport.h" -#include "cafFrameAnimationControl.h" #include -#include "RimOilField.h" -#include "RimWellPathCollection.h" -#include "RimProject.h" -#include "RivWellPathCollectionPartMgr.h" namespace caf { @@ -80,6 +85,10 @@ RimView::RimView(void) CAF_PDM_InitField(&m_currentTimeStep, "CurrentTimeStep", 0, "Current Time Step", "", "", ""); m_currentTimeStep.uiCapability()->setUiHidden(true); + CAF_PDM_InitFieldNoDefault(&managedViewCollection, "ManagedViewCollection", "Managed View Collection", "", "", ""); + managedViewCollection = new RimManagedViewCollection; + managedViewCollection.uiCapability()->setUiHidden(true); + CAF_PDM_InitFieldNoDefault(&overlayInfoConfig, "OverlayInfoConfig", "Info Box", "", "", ""); overlayInfoConfig = new Rim3dOverlayInfoConfig(); overlayInfoConfig->setReservoirView(this); @@ -443,6 +452,8 @@ void RimView::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QV if (m_viewer) { m_viewer->update(); + + managedViewCollection->updateTimeStep(m_currentTimeStep); } } else if (changedField == &backgroundColor) diff --git a/ApplicationCode/ProjectDataModel/RimView.h b/ApplicationCode/ProjectDataModel/RimView.h index 0392f83cbb..30f3b894ee 100644 --- a/ApplicationCode/ProjectDataModel/RimView.h +++ b/ApplicationCode/ProjectDataModel/RimView.h @@ -20,6 +20,7 @@ #pragma once #include "cafAppEnum.h" +#include "cafPdmChildArrayField.h" #include "cafPdmChildField.h" #include "cafPdmField.h" #include "cafPdmFieldCvfColor.h" @@ -30,16 +31,17 @@ #include -class RiuViewer; class Rim3dOverlayInfoConfig; class RimCase; class RimCellRangeFilterCollection; +class RimManagedViewCollection; +class RiuViewer; namespace cvf { class BoundingBox; - class Scene; class ModelBasicList; + class Scene; class Transform; } @@ -67,7 +69,9 @@ public: caf::PdmField maximumFrameRate; caf::PdmField hasUserRequestedAnimation; - caf::PdmChildField rangeFilterCollection; + caf::PdmChildField rangeFilterCollection; + + caf::PdmChildField managedViewCollection; // Draw style diff --git a/ApplicationCode/Resources/ResInsight.qrc b/ApplicationCode/Resources/ResInsight.qrc index 873569505e..7415b7b637 100644 --- a/ApplicationCode/Resources/ResInsight.qrc +++ b/ApplicationCode/Resources/ResInsight.qrc @@ -46,7 +46,8 @@ draw_style_surface_w_fault_mesh_24x24.png InfoBox16x16.png GeoMechCase48x48.png - GeoMechCases48x48.png + GeoMechCases48x48.png + chain.png fs_CellFace.glsl diff --git a/ApplicationCode/Resources/chain.png b/ApplicationCode/Resources/chain.png new file mode 100644 index 0000000000000000000000000000000000000000..c5205dd5985d95716d0a8b56d968aa19ce2fbd3f GIT binary patch literal 5177 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 literal 0 HcmV?d00001 diff --git a/ApplicationCode/UserInterface/RiuViewer.cpp b/ApplicationCode/UserInterface/RiuViewer.cpp index 795a5ac4ce..4032e5ac68 100644 --- a/ApplicationCode/UserInterface/RiuViewer.cpp +++ b/ApplicationCode/UserInterface/RiuViewer.cpp @@ -64,6 +64,8 @@ #include "RigFemPartCollection.h" #include "RigFemPart.h" #include "RigFemPartGrid.h" +#include "RimProject.h" +#include "RimManagedViewCollection.h" using cvf::ManipulatorTrackball; @@ -278,6 +280,12 @@ void RiuViewer::slotSetCurrentFrame(int frameIndex) if (m_reservoirView) m_reservoirView->setCurrentTimeStep(frameIndex); caf::Viewer::slotSetCurrentFrame(frameIndex); + + if (m_reservoirView) + { + m_reservoirView->managedViewCollection()->updateTimeStep(frameIndex); + } + } //-------------------------------------------------------------------------------------------------- @@ -489,3 +497,16 @@ void RiuViewer::updateNavigationPolicy() break; } } + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RiuViewer::paintEvent(QPaintEvent* event) +{ + caf::Viewer::paintEvent(event); + + if (m_reservoirView) + { + m_reservoirView->managedViewCollection()->updateViewers(this); + } +} diff --git a/ApplicationCode/UserInterface/RiuViewer.h b/ApplicationCode/UserInterface/RiuViewer.h index 4374af1d8d..571c589e0e 100644 --- a/ApplicationCode/UserInterface/RiuViewer.h +++ b/ApplicationCode/UserInterface/RiuViewer.h @@ -83,6 +83,8 @@ private: void mouseReleaseEvent(QMouseEvent* event); void mousePressEvent(QMouseEvent* event); + virtual void paintEvent(QPaintEvent* event); + QLabel* m_InfoLabel; QLabel* m_versionInfoLabel; bool m_showInfoText;;