mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
(#266) Show highlight viz models in overlay rendering
This commit is contained in:
parent
6e56ee28c2
commit
d72861f929
@ -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());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -142,6 +142,7 @@ protected:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
void createDisplayModel();
|
void createDisplayModel();
|
||||||
|
void createOverlayDisplayModel();
|
||||||
void updateDisplayModelVisibility();
|
void updateDisplayModelVisibility();
|
||||||
virtual void updateCurrentTimeStep();
|
virtual void updateCurrentTimeStep();
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user