(#266) Create parts from selection in derived classes of RimView

This commit is contained in:
Magne Sjaastad
2015-11-16 11:30:03 +01:00
parent d72861f929
commit 3bc7b88ca7
7 changed files with 118 additions and 91 deletions

View File

@@ -483,53 +483,6 @@ void RimEclipseView::createDisplayModel()
m_overlayInfoConfig()->update3DInfo();
updateLegends();
}
createOverlayDisplayModel();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimEclipseView::createOverlayDisplayModel()
{
cvf::ref<cvf::Scene> overlayScene = new cvf::Scene;
{
cvf::String highlightModelName = "HighLightModel";
cvf::ref<cvf::ModelBasicList> highlightModelBasicList = new cvf::ModelBasicList;
highlightModelBasicList->setName(highlightModelName);
RiuSelectionManager* riuSelManager = RiuSelectionManager::instance();
std::vector<RiuSelectionItem*> 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<RiuEclipseSelectionItem*>(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<cvf::Part> 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<cvf::Part>* parts)
{
RiuSelectionManager* riuSelManager = RiuSelectionManager::instance();
std::vector<RiuSelectionItem*> 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<RiuEclipseSelectionItem*>(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<cvf::Part> part = partGen.createPart(eclipseSelItem->m_color);
part->setTransform(this->scaleTransform());
parts->push_back(part.p());
}
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -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<cvf::Part>* parts);
private:
void createDisplayModel();
void createOverlayDisplayModel();
void updateDisplayModelVisibility();
virtual void updateCurrentTimeStep();

View File

@@ -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<cvf::ModelBasicList> highlightModelBasicList = new cvf::ModelBasicList;
highlightModelBasicList->setName(highlightModelName);
RiuSelectionManager* riuSelManager = RiuSelectionManager::instance();
std::vector<RiuSelectionItem*> 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<RiuGeoMechSelectionItem*>(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<cvf::Part> 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<cvf::Part>* parts)
{
RiuSelectionManager* riuSelManager = RiuSelectionManager::instance();
std::vector<RiuSelectionItem*> 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<RiuGeoMechSelectionItem*>(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<cvf::Part> part = partGen.createPart(geomSelItem->m_color);
part->setTransform(this->scaleTransform());
parts->push_back(part.p());
}
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -80,7 +80,8 @@ public:
protected:
virtual void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "");
virtual void createPartCollectionFromSelection(cvf::Collection<cvf::Part>* parts);
private:
virtual void createDisplayModel();
@@ -103,6 +104,7 @@ private:
virtual void calculateCurrentTotalCellVisibility(cvf::UByteArray* totalVisibility);
caf::PdmChildField<RimGeoMechPropertyFilterCollection*> m_propertyFilterCollection;
caf::PdmPointer<RimGeoMechPropertyFilterCollection> m_overridePropertyFilterCollection;

View File

@@ -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<cvf::Scene> overlayScene = new cvf::Scene;
cvf::Collection<cvf::Part> parts;
createPartCollectionFromSelection(&parts);
if (parts.size() > 0)
{
cvf::String highlightModelName = "HighLightModel";
cvf::ref<cvf::ModelBasicList> 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());
}

View File

@@ -31,6 +31,7 @@
#include "cvfArray.h"
#include "cvfBase.h"
#include "cvfCollection.h"
#include "cvfObject.h"
#include <QPointer>
@@ -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<cvf::Part>* parts) = 0;
virtual void updateDisplayModelVisibility() = 0;
virtual void clampCurrentTimestep() = 0;

View File

@@ -202,7 +202,7 @@ void RiuSelectionChangedHandler::scheduleUpdateForAllVisibleViews() const
for (size_t i = 0; i < visibleViews.size(); i++)
{
visibleViews[i]->scheduleCreateDisplayModelAndRedraw();
visibleViews[i]->createOverlayDisplayModelAndRedraw();
}
}
}