(#266) Show highlight viz models in overlay rendering

This commit is contained in:
Magne Sjaastad 2015-11-16 10:01:50 +01:00
parent 6e56ee28c2
commit d72861f929
4 changed files with 127 additions and 46 deletions

View File

@ -483,9 +483,55 @@ void RimEclipseView::createDisplayModel()
m_overlayInfoConfig()->update3DInfo(); m_overlayInfoConfig()->update3DInfo();
updateLegends(); 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());
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -678,42 +724,6 @@ void RimEclipseView::updateCurrentTimeStep()
currentActiveCellInfo()->geometryBoundingBox(), currentActiveCellInfo()->geometryBoundingBox(),
m_reservoirGridPartManager->scaleTransform()); m_reservoirGridPartManager->scaleTransform());
{
cvf::String highlightModelName = "HighLightModel";
this->removeModelByName(frameScene, highlightModelName);
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();
frameScene->addModel(highlightModelBasicList.p());
}
} }
} }

View File

@ -142,6 +142,7 @@ protected:
private: private:
void createDisplayModel(); void createDisplayModel();
void createOverlayDisplayModel();
void updateDisplayModelVisibility(); void updateDisplayModelVisibility();
virtual void updateCurrentTimeStep(); virtual void updateCurrentTimeStep();

View File

@ -41,6 +41,7 @@
#include "cvfCamera.h" #include "cvfCamera.h"
#include "cvfFont.h" #include "cvfFont.h"
#include "cvfOverlayAxisCross.h" #include "cvfOverlayAxisCross.h"
#include "cvfRenderQueueSorter.h"
#include "cvfRenderSequence.h" #include "cvfRenderSequence.h"
#include "cvfRendering.h" #include "cvfRendering.h"
#include "cvfScene.h" #include "cvfScene.h"
@ -164,6 +165,8 @@ RiuViewer::RiuViewer(const QGLFormat& format, QWidget* parent)
setContextMenuPolicy(Qt::PreventContextMenu); setContextMenuPolicy(Qt::PreventContextMenu);
m_gridBoxGenerator = new RivGridBoxGenerator; m_gridBoxGenerator = new RivGridBoxGenerator;
setupRenderingSequence();
} }
@ -192,21 +195,13 @@ RiuViewer::~RiuViewer()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RiuViewer::setDefaultView() void RiuViewer::setDefaultView()
{ {
cvf::BoundingBox bb; cvf::BoundingBox bb = m_renderingSequence->boundingBox();
cvf::Scene* scene = m_renderingSequence->firstRendering()->scene();
if (scene)
{
bb = scene->boundingBox();
}
if (!bb.isValid()) if (!bb.isValid())
{ {
bb.add(cvf::Vec3d(-1, -1, -1)); bb.add(cvf::Vec3d(-1, -1, -1));
bb.add(cvf::Vec3d( 1, 1, 1)); bb.add(cvf::Vec3d( 1, 1, 1));
} }
if (m_mainCamera->projection() == cvf::Camera::PERSPECTIVE) if (m_mainCamera->projection() == cvf::Camera::PERSPECTIVE)
{ {
m_mainCamera->setProjectionAsPerspective(40.0, RI_MIN_NEARPLANE_DISTANCE, 1000); m_mainCamera->setProjectionAsPerspective(40.0, RI_MIN_NEARPLANE_DISTANCE, 1000);
@ -540,3 +535,67 @@ RivGridBoxGenerator* RiuViewer::gridBoxGenerator() const
{ {
return m_gridBoxGenerator; return m_gridBoxGenerator;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuViewer::setupRenderingSequence()
{
m_overlayRendering = new cvf::Rendering;
m_overlayRendering->setCamera(new cvf::Camera);
m_overlayRendering->setRenderQueueSorter(new cvf::RenderQueueSorterBasic(cvf::RenderQueueSorterBasic::EFFECT_ONLY));
m_overlayRendering->setClearMode(cvf::Viewport::DO_NOT_CLEAR);
// Set fixed function rendering if QGLFormat does not support directRendering
if (!this->format().directRendering())
{
m_overlayRendering->renderEngine()->enableForcedImmediateMode(true);
}
m_renderingSequence->addRendering(m_overlayRendering.p());
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuViewer::setOverlayScene(cvf::Scene* scene)
{
m_overlayRendering->setScene(scene);
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuViewer::copyCameraView(cvf::Camera* srcCamera, cvf::Camera* dstCamera)
{
if (srcCamera->projection() == cvf::Camera::PERSPECTIVE)
{
dstCamera->setProjectionAsPerspective(srcCamera->fieldOfViewYDeg(), srcCamera->nearPlane(), srcCamera->farPlane());
}
else
{
dstCamera->setProjectionAsOrtho(srcCamera->frontPlaneFrustumHeight(), srcCamera->nearPlane(), srcCamera->farPlane());
}
dstCamera->setViewMatrix(srcCamera->viewMatrix());
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuViewer::optimizeClippingPlanes()
{
caf::Viewer::optimizeClippingPlanes();
copyCameraView(m_mainCamera.p(), m_overlayRendering->camera());
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuViewer::resizeGL(int width, int height)
{
caf::Viewer::resizeGL(width, height);
m_overlayRendering->camera()->viewport()->set(0, 0, width, height);
}

View File

@ -56,6 +56,8 @@ public:
RiuViewer(const QGLFormat& format, QWidget* parent); RiuViewer(const QGLFormat& format, QWidget* parent);
~RiuViewer(); ~RiuViewer();
void setOverlayScene(cvf::Scene* scene);
void setDefaultView(); void setDefaultView();
cvf::Vec3d pointOfInterest(); cvf::Vec3d pointOfInterest();
void setPointOfInterest(cvf::Vec3d poi); void setPointOfInterest(cvf::Vec3d poi);
@ -86,12 +88,20 @@ public slots:
virtual void slotSetCurrentFrame(int frameIndex); virtual void slotSetCurrentFrame(int frameIndex);
virtual void slotEndAnimation(); virtual void slotEndAnimation();
protected:
virtual void optimizeClippingPlanes();
virtual void resizeGL(int width, int height);
private: private:
void paintOverlayItems(QPainter* painter); void paintOverlayItems(QPainter* painter);
void mouseReleaseEvent(QMouseEvent* event); void mouseReleaseEvent(QMouseEvent* event);
void mousePressEvent(QMouseEvent* event); void mousePressEvent(QMouseEvent* event);
void setupRenderingSequence();
static void copyCameraView(cvf::Camera* srcCamera, cvf::Camera* dstCamera);
private:
QLabel* m_InfoLabel; QLabel* m_InfoLabel;
QLabel* m_versionInfoLabel; QLabel* m_versionInfoLabel;
bool m_showInfoText; bool m_showInfoText;
@ -103,7 +113,6 @@ private:
QCDEStyle* m_progressBarStyle; QCDEStyle* m_progressBarStyle;
cvf::Collection<cvf::OverlayItem> m_visibleLegends; cvf::Collection<cvf::OverlayItem> m_visibleLegends;
caf::PdmPointer<RimView> m_rimView; caf::PdmPointer<RimView> m_rimView;
@ -112,5 +121,7 @@ private:
RiuViewerCommands* m_viewerCommands; RiuViewerCommands* m_viewerCommands;
RivGridBoxGenerator* m_gridBoxGenerator; RivGridBoxGenerator* m_gridBoxGenerator;
cvf::ref<cvf::Rendering> m_overlayRendering;
}; };