diff --git a/ApplicationCode/ProjectDataModel/RimEclipseView.cpp b/ApplicationCode/ProjectDataModel/RimEclipseView.cpp index 9901e407da..67d8b58f32 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseView.cpp +++ b/ApplicationCode/ProjectDataModel/RimEclipseView.cpp @@ -483,53 +483,6 @@ void RimEclipseView::createDisplayModel() m_overlayInfoConfig()->update3DInfo(); updateLegends(); } - - createOverlayDisplayModel(); -} - - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -void RimEclipseView::createOverlayDisplayModel() -{ - cvf::ref overlayScene = new cvf::Scene; - - { - cvf::String highlightModelName = "HighLightModel"; - - cvf::ref highlightModelBasicList = new cvf::ModelBasicList; - highlightModelBasicList->setName(highlightModelName); - - RiuSelectionManager* riuSelManager = RiuSelectionManager::instance(); - std::vector items; - riuSelManager->selectedItems(items); - for (size_t i = 0; i < items.size(); i++) - { - if (items[i]->type() == RiuSelectionItem::ECLIPSE_SELECTION_OBJECT) - { - RiuEclipseSelectionItem* eclipseSelItem = static_cast(items[i]); - if (eclipseSelItem && - eclipseSelItem->m_view) - { - CVF_ASSERT(eclipseSelItem->m_view->eclipseCase()); - CVF_ASSERT(eclipseSelItem->m_view->eclipseCase()->reservoirData()); - - RivSingleCellPartGenerator partGen(eclipseSelItem->m_view->eclipseCase()->reservoirData(), eclipseSelItem->m_gridIndex, eclipseSelItem->m_cellIndex); - - cvf::ref part = partGen.createPart(eclipseSelItem->m_color); - part->setTransform(this->scaleTransform()); - - highlightModelBasicList->addPart(part.p()); - } - } - } - - highlightModelBasicList->updateBoundingBoxesRecursive(); - overlayScene->addModel(highlightModelBasicList.p()); - } - - m_viewer->setOverlayScene(overlayScene.p()); } //-------------------------------------------------------------------------------------------------- @@ -1693,6 +1646,36 @@ void RimEclipseView::calculateCurrentTotalCellVisibility(cvf::UByteArray* totalV } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimEclipseView::createPartCollectionFromSelection(cvf::Collection* parts) +{ + RiuSelectionManager* riuSelManager = RiuSelectionManager::instance(); + std::vector items; + riuSelManager->selectedItems(items); + + for (size_t i = 0; i < items.size(); i++) + { + if (items[i]->type() == RiuSelectionItem::ECLIPSE_SELECTION_OBJECT) + { + RiuEclipseSelectionItem* eclipseSelItem = static_cast(items[i]); + if (eclipseSelItem && eclipseSelItem->m_view == this) + { + CVF_ASSERT(eclipseSelItem->m_view->eclipseCase()); + CVF_ASSERT(eclipseSelItem->m_view->eclipseCase()->reservoirData()); + + RivSingleCellPartGenerator partGen(eclipseSelItem->m_view->eclipseCase()->reservoirData(), eclipseSelItem->m_gridIndex, eclipseSelItem->m_cellIndex); + + cvf::ref part = partGen.createPart(eclipseSelItem->m_color); + part->setTransform(this->scaleTransform()); + + parts->push_back(part.p()); + } + } + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimEclipseView.h b/ApplicationCode/ProjectDataModel/RimEclipseView.h index 0c35cef774..7f6819fdad 100644 --- a/ApplicationCode/ProjectDataModel/RimEclipseView.h +++ b/ApplicationCode/ProjectDataModel/RimEclipseView.h @@ -140,9 +140,10 @@ protected: virtual void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ); virtual void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = ""); + virtual void createPartCollectionFromSelection(cvf::Collection* parts); + private: void createDisplayModel(); - void createOverlayDisplayModel(); void updateDisplayModelVisibility(); virtual void updateCurrentTimeStep(); diff --git a/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp b/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp index f81f574e99..b4fb832a75 100644 --- a/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp +++ b/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp @@ -43,6 +43,7 @@ #include "RivGeoMechPartMgr.h" #include "RivGeoMechPartMgrCache.h" #include "RivGeoMechVizLogic.h" +#include "RivGridBoxGenerator.h" #include "RivSingleCellPartGenerator.h" #include "cafCadNavigation.h" @@ -284,36 +285,6 @@ void RimGeoMechView::updateCurrentTimeStep() femBBox, scaleTransform()); frameScene->addModel(wellPathModel.p()); - - { - cvf::String highlightModelName = "HighLightModel"; - cvf::ref highlightModelBasicList = new cvf::ModelBasicList; - highlightModelBasicList->setName(highlightModelName); - - RiuSelectionManager* riuSelManager = RiuSelectionManager::instance(); - std::vector items; - riuSelManager->selectedItems(items); - for (size_t i = 0; i < items.size(); i++) - { - if (items[i]->type() == RiuSelectionItem::GEOMECH_SELECTION_OBJECT) - { - RiuGeoMechSelectionItem* geomSelItem = static_cast(items[i]); - if (geomSelItem && - geomSelItem->m_view && - geomSelItem->m_view->geoMechCase()) - { - RivSingleCellPartGenerator partGen(geomSelItem->m_view->geoMechCase(), geomSelItem->m_gridIndex, geomSelItem->m_cellIndex); - cvf::ref part = partGen.createPart(geomSelItem->m_color); - part->setTransform(this->scaleTransform()); - - highlightModelBasicList->addPart(part.p()); - } - } - } - - highlightModelBasicList->updateBoundingBoxesRecursive(); - frameScene->addModel(highlightModelBasicList.p()); - } } } @@ -615,6 +586,33 @@ void RimGeoMechView::calculateCurrentTotalCellVisibility(cvf::UByteArray* totalV m_vizLogic->calculateCurrentTotalCellVisibility(totalVisibility, m_currentTimeStep); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimGeoMechView::createPartCollectionFromSelection(cvf::Collection* parts) +{ + RiuSelectionManager* riuSelManager = RiuSelectionManager::instance(); + std::vector items; + riuSelManager->selectedItems(items); + for (size_t i = 0; i < items.size(); i++) + { + if (items[i]->type() == RiuSelectionItem::GEOMECH_SELECTION_OBJECT) + { + RiuGeoMechSelectionItem* geomSelItem = static_cast(items[i]); + if (geomSelItem && + geomSelItem->m_view == this && + geomSelItem->m_view->geoMechCase()) + { + RivSingleCellPartGenerator partGen(geomSelItem->m_view->geoMechCase(), geomSelItem->m_gridIndex, geomSelItem->m_cellIndex); + cvf::ref part = partGen.createPart(geomSelItem->m_color); + part->setTransform(this->scaleTransform()); + + parts->push_back(part.p()); + } + } + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimGeoMechView.h b/ApplicationCode/ProjectDataModel/RimGeoMechView.h index 710162393e..823e173b3d 100644 --- a/ApplicationCode/ProjectDataModel/RimGeoMechView.h +++ b/ApplicationCode/ProjectDataModel/RimGeoMechView.h @@ -80,7 +80,8 @@ public: protected: virtual void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = ""); - + + virtual void createPartCollectionFromSelection(cvf::Collection* parts); private: virtual void createDisplayModel(); @@ -103,6 +104,7 @@ private: virtual void calculateCurrentTotalCellVisibility(cvf::UByteArray* totalVisibility); + caf::PdmChildField m_propertyFilterCollection; caf::PdmPointer m_overridePropertyFilterCollection; diff --git a/ApplicationCode/ProjectDataModel/RimView.cpp b/ApplicationCode/ProjectDataModel/RimView.cpp index 7ff03ce908..3679598883 100644 --- a/ApplicationCode/ProjectDataModel/RimView.cpp +++ b/ApplicationCode/ProjectDataModel/RimView.cpp @@ -248,17 +248,6 @@ void RimView::setCurrentTimeStep(int frameIndex) m_currentReservoirCellVisibility = NULL; } this->updateCurrentTimeStep(); - - cvf::Scene* frameScene = m_viewer->frame(m_currentTimeStep); - if (frameScene) - { - frameScene->removeModel(m_viewer->gridBoxGenerator()->model()); - - if (true) - { - frameScene->addModel(m_viewer->gridBoxGenerator()->model()); - } - } } //-------------------------------------------------------------------------------------------------- /// @@ -281,6 +270,7 @@ void RimView::createDisplayModelAndRedraw() createDisplayModel(); updateDisplayModelVisibility(); + createOverlayDisplayModel(); if (cameraPosition().isIdentity()) { @@ -803,3 +793,49 @@ void RimView::updateGridBoxData() } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimView::createOverlayDisplayModelAndRedraw() +{ + createOverlayDisplayModel(); + + if (m_viewer) + { + m_viewer->update(); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimView::createOverlayDisplayModel() +{ + cvf::ref overlayScene = new cvf::Scene; + + cvf::Collection parts; + createPartCollectionFromSelection(&parts); + if (parts.size() > 0) + { + cvf::String highlightModelName = "HighLightModel"; + + cvf::ref highlightModelBasicList = new cvf::ModelBasicList; + highlightModelBasicList->setName(highlightModelName); + + for (size_t i = 0; i < parts.size(); i++) + { + highlightModelBasicList->addPart(parts[i].p()); + } + + highlightModelBasicList->updateBoundingBoxesRecursive(); + overlayScene->addModel(highlightModelBasicList.p()); + } + + if (true) + { + overlayScene->addModel(m_viewer->gridBoxGenerator()->model()); + } + + m_viewer->setOverlayScene(overlayScene.p()); +} + diff --git a/ApplicationCode/ProjectDataModel/RimView.h b/ApplicationCode/ProjectDataModel/RimView.h index 7b8b20769c..e13bac0153 100644 --- a/ApplicationCode/ProjectDataModel/RimView.h +++ b/ApplicationCode/ProjectDataModel/RimView.h @@ -31,6 +31,7 @@ #include "cvfArray.h" #include "cvfBase.h" +#include "cvfCollection.h" #include "cvfObject.h" #include @@ -51,6 +52,7 @@ namespace cvf class Scene; class String; class Transform; + class Part; } //================================================================================================== @@ -130,6 +132,7 @@ public: virtual void scheduleGeometryRegen(RivCellSetEnum geometryType) = 0; void scheduleCreateDisplayModelAndRedraw(); void createDisplayModelAndRedraw(); + void createOverlayDisplayModelAndRedraw(); RimViewController* viewController() const; bool isMasterView() const; @@ -158,6 +161,10 @@ protected: static void removeModelByName(cvf::Scene* scene, const cvf::String& modelName); virtual void createDisplayModel() = 0; + + void createOverlayDisplayModel(); + virtual void createPartCollectionFromSelection(cvf::Collection* parts) = 0; + virtual void updateDisplayModelVisibility() = 0; virtual void clampCurrentTimestep() = 0; diff --git a/ApplicationCode/UserInterface/RiuSelectionChangedHandler.cpp b/ApplicationCode/UserInterface/RiuSelectionChangedHandler.cpp index b6fe284201..6a0dcaab39 100644 --- a/ApplicationCode/UserInterface/RiuSelectionChangedHandler.cpp +++ b/ApplicationCode/UserInterface/RiuSelectionChangedHandler.cpp @@ -202,7 +202,7 @@ void RiuSelectionChangedHandler::scheduleUpdateForAllVisibleViews() const for (size_t i = 0; i < visibleViews.size(); i++) { - visibleViews[i]->scheduleCreateDisplayModelAndRedraw(); + visibleViews[i]->createOverlayDisplayModelAndRedraw(); } } }