Refactoring more general stuff into RimView

updateViewerWidget
scheduleUpdateDisplayModelAndRedraw
This commit is contained in:
Jacob Støren 2015-04-30 10:34:15 +02:00
parent 4b7d593b3c
commit 3dac8807c7
10 changed files with 165 additions and 177 deletions

View File

@ -1969,7 +1969,7 @@ QString RiaApplication::commandLineParameterHelp() const
/// Schedule a creation of the Display model and redraw of the reservoir view
/// The redraw will happen as soon as the event loop is entered
//--------------------------------------------------------------------------------------------------
void RiaApplication::scheduleDisplayModelUpdateAndRedraw(RimReservoirView* resViewToUpdate)
void RiaApplication::scheduleDisplayModelUpdateAndRedraw(RimView* resViewToUpdate)
{
m_resViewsToUpdate.push_back(resViewToUpdate);
@ -1992,13 +1992,13 @@ void RiaApplication::scheduleDisplayModelUpdateAndRedraw(RimReservoirView* resVi
void RiaApplication::slotUpdateScheduledDisplayModels()
{
// Compress to remove duplicates
std::set<RimReservoirView*> resViewsToUpdate;
std::set<RimView*> resViewsToUpdate;
for (size_t i = 0; i < m_resViewsToUpdate.size(); ++i)
{
resViewsToUpdate.insert(m_resViewsToUpdate[i]);
}
for (std::set<RimReservoirView*>::iterator it = resViewsToUpdate.begin(); it != resViewsToUpdate.end(); ++it )
for (std::set<RimView*>::iterator it = resViewsToUpdate.begin(); it != resViewsToUpdate.end(); ++it )
{
if (*it)
{

View File

@ -38,6 +38,7 @@ class Drawable;
class RiaSocketServer;
class RiaPreferences;
class RimReservoirView;
class RimView;
class RimProject;
class RimCommandObject;
class RiaProjectModifier;
@ -76,7 +77,7 @@ public:
RimReservoirView* activeReservoirView();
const RimReservoirView* activeReservoirView() const;
void scheduleDisplayModelUpdateAndRedraw(RimReservoirView* resViewToUpdate);
void scheduleDisplayModelUpdateAndRedraw(RimView* resViewToUpdate);
RimProject* project();
@ -174,7 +175,7 @@ private:
caf::PdmPointer<RimReservoirView> m_activeReservoirView;
caf::PdmPointer<RimProject> m_project;
std::vector<caf::PdmPointer<RimReservoirView> > m_resViewsToUpdate;
std::vector<caf::PdmPointer<RimView> > m_resViewsToUpdate;
QTimer* m_resViewUpdateTimer;
RiaSocketServer* m_socketServer;

View File

@ -87,6 +87,9 @@ RimGeoMechView::RimGeoMechView(void)
CAF_PDM_InitField(&meshMode, "MeshMode", defaultMeshType, "Grid lines", "", "", "");
CAF_PDM_InitFieldNoDefault(&surfaceMode, "SurfaceMode", "Grid surface", "", "", "");
//this->cellResult()->setReservoirView(this);
this->cellResult()->legendConfig()->setPosition(cvf::Vec2ui(10, 120));
this->cellResult()->legendConfig()->setReservoirView(this);
}
//--------------------------------------------------------------------------------------------------
@ -94,71 +97,9 @@ RimGeoMechView::RimGeoMechView(void)
//--------------------------------------------------------------------------------------------------
RimGeoMechView::~RimGeoMechView(void)
{
m_geomechCase = NULL;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimGeoMechView::updateViewerWidget()
{
if (showWindow())
{
bool isViewerCreated = false;
if (!m_viewer)
{
QGLFormat glFormat;
glFormat.setDirectRendering(RiaApplication::instance()->useShaders());
m_viewer = new RiuViewer(glFormat, NULL);
//m_viewer->setOwnerReservoirView(this);
RiuMainWindow::instance()->addViewer(m_viewer);
m_viewer->setMinNearPlaneDistance(10);
m_viewer->removeAllColorLegends();
m_viewer->addColorLegendToBottomLeftCorner(this->cellResult()->legendConfig->legend());
if (RiaApplication::instance()->navigationPolicy() == RiaApplication::NAVIGATION_POLICY_CEETRON)
{
m_viewer->setNavigationPolicy(new caf::CeetronPlusNavigation);
}
else
{
m_viewer->setNavigationPolicy(new caf::CadNavigation);
}
m_viewer->enablePerfInfoHud(RiaApplication::instance()->showPerformanceInfo());
//m_viewer->layoutWidget()->showMaximized();
isViewerCreated = true;
}
RiuMainWindow::instance()->setActiveViewer(m_viewer);
if (isViewerCreated) m_viewer->mainCamera()->setViewMatrix(cameraPosition);
m_viewer->mainCamera()->viewport()->setClearColor(cvf::Color4f(backgroundColor()));
m_viewer->update();
}
else
{
if (m_viewer)
{
if (m_viewer->layoutWidget()->parentWidget())
{
m_viewer->layoutWidget()->parentWidget()->hide();
}
else
{
m_viewer->layoutWidget()->hide();
}
}
}
updateViewerWidgetWindowTitle();
}
//--------------------------------------------------------------------------------------------------
///
@ -168,9 +109,9 @@ void RimGeoMechView::updateViewerWidgetWindowTitle()
if (m_viewer)
{
QString windowTitle;
if (false)//m_reservoir.notNull())
if (m_geomechCase.notNull())
{
// windowTitle = QString("%1 - %2").arg(m_reservoir->caseUserDescription()).arg(name);
windowTitle = QString("%1 - %2").arg(m_geomechCase->caseUserDescription()).arg(name);
}
else
{
@ -253,6 +194,17 @@ void RimGeoMechView::setGeoMechCase(RimGeoMechCase* gmCase)
m_geomechCase = gmCase;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimGeoMechView::resetLegendsInViewer()
{
this->cellResult()->legendConfig->recreateLegend();
m_viewer->removeAllColorLegends();
m_viewer->addColorLegendToBottomLeftCorner(this->cellResult()->legendConfig->legend());
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@ -76,9 +76,10 @@ public:
caf::PdmField< caf::AppEnum< SurfaceModeType > > surfaceMode;
private:
void updateViewerWidget();
void updateViewerWidgetWindowTitle();
void createDisplayModelAndRedraw();
virtual void updateViewerWidgetWindowTitle();
virtual void createDisplayModelAndRedraw();
virtual void resetLegendsInViewer();
caf::PdmPointer<RimGeoMechCase> m_geomechCase;
cvf::ref<RivGeoMechPartMgr> m_geoMechVizModel;

View File

@ -160,85 +160,17 @@ RimReservoirView::~RimReservoirView()
delete this->faultResultSettings();
delete this->cellResult();
delete this->cellEdgeResult();
delete this->overlayInfoConfig();
delete rangeFilterCollection();
delete propertyFilterCollection();
delete wellCollection();
delete faultCollection();
if (m_viewer)
{
RiuMainWindow::instance()->removeViewer(m_viewer);
}
m_reservoirGridPartManager->clearGeometryCache();
delete m_viewer;
m_reservoir = NULL;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimReservoirView::updateViewerWidget()
{
if (showWindow())
{
bool isViewerCreated = false;
if (!m_viewer)
{
QGLFormat glFormat;
glFormat.setDirectRendering(RiaApplication::instance()->useShaders());
m_viewer = new RiuViewer(glFormat, NULL);
m_viewer->setOwnerReservoirView(this);
RiuMainWindow::instance()->addViewer(m_viewer);
m_viewer->setMinNearPlaneDistance(10);
this->resetLegendsInViewer();
if (RiaApplication::instance()->navigationPolicy() == RiaApplication::NAVIGATION_POLICY_CEETRON)
{
m_viewer->setNavigationPolicy(new caf::CeetronPlusNavigation);
}
else
{
m_viewer->setNavigationPolicy(new caf::CadNavigation);
}
m_viewer->enablePerfInfoHud(RiaApplication::instance()->showPerformanceInfo());
//m_viewer->layoutWidget()->showMaximized();
isViewerCreated = true;
}
RiuMainWindow::instance()->setActiveViewer(m_viewer);
if (isViewerCreated) m_viewer->mainCamera()->setViewMatrix(cameraPosition);
m_viewer->mainCamera()->viewport()->setClearColor(cvf::Color4f(backgroundColor()));
m_viewer->update();
}
else
{
if (m_viewer)
{
if (m_viewer->layoutWidget()->parentWidget())
{
m_viewer->layoutWidget()->parentWidget()->hide();
}
else
{
m_viewer->layoutWidget()->hide();
}
}
}
updateViewerWidgetWindowTitle();
}
//--------------------------------------------------------------------------------------------------
///
@ -278,14 +210,6 @@ void RimReservoirView::clampCurrentTimestep()
if (m_currentTimeStep < 0 ) m_currentTimeStep = 0;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimReservoirView::scheduleCreateDisplayModelAndRedraw()
{
RiaApplication::instance()->scheduleDisplayModelUpdateAndRedraw(this);
}
//--------------------------------------------------------------------------------------------------
///

View File

@ -133,11 +133,11 @@ public:
private:
void updateViewerWidget();
void resetLegendsInViewer();
virtual void resetLegendsInViewer();
void updateViewerWidgetWindowTitle();
virtual void updateViewerWidgetWindowTitle();
void setDefaultView();
public:
@ -155,9 +155,8 @@ public:
// Display model generation
public:
virtual void createDisplayModelAndRedraw();
void loadDataAndUpdate();
void createDisplayModelAndRedraw();
void scheduleCreateDisplayModelAndRedraw();
bool isTimeStepDependentDataVisible() const;
void scheduleGeometryRegen(unsigned short geometryType);
@ -171,6 +170,7 @@ public:
// Display model generation
private:
void createDisplayModel();
void updateDisplayModelVisibility();
void updateCurrentTimeStep();

View File

@ -5,6 +5,11 @@
#include "RiaPreferences.h"
#include "Rim3dOverlayInfoConfig.h"
#include "RiuViewer.h"
#include "RiuMainWindow.h"
#include "cafCeetronPlusNavigation.h"
#include "cafCadNavigation.h"
#include "cvfCamera.h"
#include "cvfViewport.h"
CAF_PDM_ABSTRACT_SOURCE_INIT(RimView, "GenericView"); // Do not use. Abstract class
@ -51,7 +56,14 @@ RimView::RimView(void)
//--------------------------------------------------------------------------------------------------
RimView::~RimView(void)
{
delete this->overlayInfoConfig();
if (m_viewer)
{
RiuMainWindow::instance()->removeViewer(m_viewer);
}
delete m_viewer;
}
//--------------------------------------------------------------------------------------------------
@ -62,5 +74,75 @@ RiuViewer* RimView::viewer()
return m_viewer;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimView::updateViewerWidget()
{
if (showWindow())
{
bool isViewerCreated = false;
if (!m_viewer)
{
QGLFormat glFormat;
glFormat.setDirectRendering(RiaApplication::instance()->useShaders());
m_viewer = new RiuViewer(glFormat, NULL);
m_viewer->setOwnerReservoirView(this);
RiuMainWindow::instance()->addViewer(m_viewer);
m_viewer->setMinNearPlaneDistance(10);
this->resetLegendsInViewer();
if (RiaApplication::instance()->navigationPolicy() == RiaApplication::NAVIGATION_POLICY_CEETRON)
{
m_viewer->setNavigationPolicy(new caf::CeetronPlusNavigation);
}
else
{
m_viewer->setNavigationPolicy(new caf::CadNavigation);
}
m_viewer->enablePerfInfoHud(RiaApplication::instance()->showPerformanceInfo());
isViewerCreated = true;
}
RiuMainWindow::instance()->setActiveViewer(m_viewer);
if (isViewerCreated) m_viewer->mainCamera()->setViewMatrix(cameraPosition);
m_viewer->mainCamera()->viewport()->setClearColor(cvf::Color4f(backgroundColor()));
m_viewer->update();
}
else
{
if (m_viewer)
{
if (m_viewer->layoutWidget()->parentWidget())
{
m_viewer->layoutWidget()->parentWidget()->hide();
}
else
{
m_viewer->layoutWidget()->hide();
}
}
}
updateViewerWidgetWindowTitle();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimView::scheduleCreateDisplayModelAndRedraw()
{
RiaApplication::instance()->scheduleDisplayModelUpdateAndRedraw(this);
}

View File

@ -62,14 +62,17 @@ public:
virtual void updateCurrentTimeStepAndRedraw() = 0;
virtual void endAnimation() = 0;
void scheduleCreateDisplayModelAndRedraw();
virtual void createDisplayModelAndRedraw() = 0;
public:
virtual caf::PdmFieldHandle* objectToggleField() { return &showWindow; }
virtual caf::PdmFieldHandle* userDescriptionField() { return &name; }
protected:
//void updateViewerWidget();
//virtual void resetLegendsInViewer() = 0;
virtual void resetLegendsInViewer() = 0;
void updateViewerWidget();
virtual void updateViewerWidgetWindowTitle() = 0;
QPointer<RiuViewer> m_viewer;
caf::PdmField<int> m_currentTimeStep;
};

View File

@ -204,6 +204,9 @@ void RiuViewer::mouseReleaseEvent(QMouseEvent* event)
}
else if (event->button() == Qt::RightButton)
{
RimReservoirView* eclipseView = dynamic_cast<RimReservoirView*>(m_reservoirView.p());
if (!eclipseView) return;
m_currentGridIdx = cvf::UNDEFINED_SIZE_T;
m_currentCellIndex = cvf::UNDEFINED_SIZE_T;
@ -244,7 +247,7 @@ void RiuViewer::mouseReleaseEvent(QMouseEvent* event)
menu.addAction(QString("J-slice range filter"), this, SLOT(slotRangeFilterJ()));
menu.addAction(QString("K-slice range filter"), this, SLOT(slotRangeFilterK()));
const RigCaseData* reservoir = m_reservoirView->eclipseCase()->reservoirData();
const RigCaseData* reservoir = eclipseView->eclipseCase()->reservoirData();
const RigFault* fault = reservoir->mainGrid()->findFaultFromCellIndexAndCellFace(m_currentCellIndex, m_currentFaceIndex);
if (fault)
{
@ -265,10 +268,13 @@ void RiuViewer::mouseReleaseEvent(QMouseEvent* event)
//--------------------------------------------------------------------------------------------------
///
/// Todo: Move this to a command instead
//--------------------------------------------------------------------------------------------------
void RiuViewer::slotRangeFilterI()
{
RimReservoirView* eclipseView = dynamic_cast<RimReservoirView*>(m_reservoirView.p());
if (!eclipseView) return;
size_t i, j, k;
ijkFromCellIndex(m_currentGridIdx, m_currentCellIndex, &i, &j, &k);
@ -276,7 +282,7 @@ void RiuViewer::slotRangeFilterI()
RimUiTreeModelPdm* myModel = mainWindow->uiPdmModel();
if (myModel)
{
RimCellRangeFilterCollection* rangeFilterCollection = m_reservoirView->rangeFilterCollection();
RimCellRangeFilterCollection* rangeFilterCollection = eclipseView->rangeFilterCollection();
QModelIndex collectionModelIndex = myModel->getModelIndexFromPdmObject(rangeFilterCollection);
@ -296,7 +302,7 @@ void RiuViewer::slotRangeFilterI()
mainWindow->setCurrentObjectInTreeView(rangeFilter);
}
m_reservoirView->setSurfaceDrawstyle();
eclipseView->setSurfaceDrawstyle();
}
//--------------------------------------------------------------------------------------------------
@ -304,6 +310,9 @@ void RiuViewer::slotRangeFilterI()
//--------------------------------------------------------------------------------------------------
void RiuViewer::slotRangeFilterJ()
{
RimReservoirView* eclipseView = dynamic_cast<RimReservoirView*>(m_reservoirView.p());
if (!eclipseView) return;
size_t i, j, k;
ijkFromCellIndex(m_currentGridIdx, m_currentCellIndex, &i, &j, &k);
@ -311,7 +320,7 @@ void RiuViewer::slotRangeFilterJ()
RimUiTreeModelPdm* myModel = mainWindow->uiPdmModel();
if (myModel)
{
RimCellRangeFilterCollection* rangeFilterCollection = m_reservoirView->rangeFilterCollection();
RimCellRangeFilterCollection* rangeFilterCollection = eclipseView->rangeFilterCollection();
QModelIndex collectionModelIndex = myModel->getModelIndexFromPdmObject(rangeFilterCollection);
@ -331,7 +340,7 @@ void RiuViewer::slotRangeFilterJ()
mainWindow->setCurrentObjectInTreeView(rangeFilter);
}
m_reservoirView->setSurfaceDrawstyle();
eclipseView->setSurfaceDrawstyle();
}
//--------------------------------------------------------------------------------------------------
@ -339,6 +348,9 @@ void RiuViewer::slotRangeFilterJ()
//--------------------------------------------------------------------------------------------------
void RiuViewer::slotRangeFilterK()
{
RimReservoirView* eclipseView = dynamic_cast<RimReservoirView*>(m_reservoirView.p());
if (!eclipseView) return;
size_t i, j, k;
ijkFromCellIndex(m_currentGridIdx, m_currentCellIndex, &i, &j, &k);
@ -346,7 +358,7 @@ void RiuViewer::slotRangeFilterK()
RimUiTreeModelPdm* myModel = mainWindow->uiPdmModel();
if (myModel)
{
RimCellRangeFilterCollection* rangeFilterCollection = m_reservoirView->rangeFilterCollection();
RimCellRangeFilterCollection* rangeFilterCollection = eclipseView->rangeFilterCollection();
QModelIndex collectionModelIndex = myModel->getModelIndexFromPdmObject(rangeFilterCollection);
@ -366,7 +378,7 @@ void RiuViewer::slotRangeFilterK()
mainWindow->setCurrentObjectInTreeView(rangeFilter);
}
m_reservoirView->setSurfaceDrawstyle();
eclipseView->setSurfaceDrawstyle();
}
//--------------------------------------------------------------------------------------------------
@ -386,6 +398,8 @@ void RiuViewer::keyPressEvent(QKeyEvent* event)
//--------------------------------------------------------------------------------------------------
void RiuViewer::handlePickAction(int winPosX, int winPosY)
{
RimReservoirView* eclipseView = dynamic_cast<RimReservoirView*>(m_reservoirView.p());
RiaApplication* app = RiaApplication::instance();
RiuMainWindow* mainWnd = RiuMainWindow::instance();
@ -444,7 +458,7 @@ void RiuViewer::handlePickAction(int winPosX, int winPosY)
if (cellIndex != cvf::UNDEFINED_SIZE_T)
{
RiuResultTextBuilder textBuilder(m_reservoirView, gridIndex, cellIndex, m_reservoirView->currentTimeStep());
RiuResultTextBuilder textBuilder(eclipseView, gridIndex, cellIndex, eclipseView->currentTimeStep());
textBuilder.setFace(face);
textBuilder.setNncIndex(nncIndex);
textBuilder.setIntersectionPoint(localIntersectionPoint);
@ -506,7 +520,7 @@ void RiuViewer::setPointOfInterest(cvf::Vec3d poi)
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RiuViewer::setOwnerReservoirView(RimReservoirView * owner)
void RiuViewer::setOwnerReservoirView(RimView * owner)
{
m_reservoirView = owner;
}
@ -524,6 +538,9 @@ void RiuViewer::setEnableMask(unsigned int mask)
//--------------------------------------------------------------------------------------------------
void RiuViewer::pickPointAndFace(int winPosX, int winPosY, cvf::Vec3d* localIntersectionPoint, cvf::Part** firstPart, uint* firstPartFaceHit, cvf::Part** nncPart, uint* nncPartFaceHit)
{
RimReservoirView* eclipseView = dynamic_cast<RimReservoirView*>(m_reservoirView.p());
if(!eclipseView) return;
cvf::HitItemCollection hitItems;
bool isSomethingHit = rayPick(winPosX, winPosY, &hitItems);
@ -532,9 +549,9 @@ void RiuViewer::pickPointAndFace(int winPosX, int winPosY, cvf::Vec3d* localInte
CVF_ASSERT(hitItems.count() > 0);
double characteristicCellSize = 5.0;
if (m_reservoirView && m_reservoirView->eclipseCase())
if (eclipseView && eclipseView->eclipseCase())
{
characteristicCellSize = m_reservoirView->eclipseCase()->reservoirData()->mainGrid()->characteristicIJCellSize();
characteristicCellSize = eclipseView->eclipseCase()->reservoirData()->mainGrid()->characteristicIJCellSize();
}
double pickDepthThresholdSquared = characteristicCellSize / 100.0;
@ -718,9 +735,13 @@ void RiuViewer::showHistogram(bool enable)
//--------------------------------------------------------------------------------------------------
void RiuViewer::ijkFromCellIndex(size_t gridIdx, size_t cellIndex, size_t* i, size_t* j, size_t* k)
{
if (m_reservoirView->eclipseCase())
RimReservoirView* eclipseView = dynamic_cast<RimReservoirView*>(m_reservoirView.p());
if(!eclipseView) return;
if (eclipseView->eclipseCase())
{
m_reservoirView->eclipseCase()->reservoirData()->grid(gridIdx)->ijkFromCellIndex(cellIndex, i, j, k);
eclipseView->eclipseCase()->reservoirData()->grid(gridIdx)->ijkFromCellIndex(cellIndex, i, j, k);
}
}
@ -738,13 +759,17 @@ void RiuViewer::mousePressEvent(QMouseEvent* event)
//--------------------------------------------------------------------------------------------------
void RiuViewer::slotHideFault()
{
const RigCaseData* reservoir = m_reservoirView->eclipseCase()->reservoirData();
RimReservoirView* eclipseView = dynamic_cast<RimReservoirView*>(m_reservoirView.p());
if(!eclipseView) return;
const RigCaseData* reservoir = eclipseView->eclipseCase()->reservoirData();
const RigFault* fault = reservoir->mainGrid()->findFaultFromCellIndexAndCellFace(m_currentCellIndex, m_currentFaceIndex);
if (fault)
{
QString faultName = fault->name();
RimFault* rimFault = m_reservoirView->faultCollection()->findFaultByName(faultName);
RimFault* rimFault = eclipseView->faultCollection()->findFaultByName(faultName);
if (rimFault)
{
rimFault->showFault.setValueFromUi(!rimFault->showFault);

View File

@ -28,7 +28,7 @@
#include "cafMouseState.h"
#include "cvfStructGrid.h"
class RimReservoirView;
class RimView;
class QLabel;
class QProgressBar;
class RiuSimpleHistogramWidget;
@ -56,7 +56,7 @@ public:
void setDefaultView();
cvf::Vec3d pointOfInterest();
void setPointOfInterest(cvf::Vec3d poi);
void setOwnerReservoirView(RimReservoirView * owner);
void setOwnerReservoirView(RimView * owner);
void setEnableMask(unsigned int mask);
void showInfoText(bool enable);
@ -109,7 +109,7 @@ private:
cvf::Collection<cvf::OverlayItem> m_visibleLegends;
caf::PdmPointer<RimReservoirView> m_reservoirView;
caf::PdmPointer<RimView> m_reservoirView;
size_t m_currentGridIdx;
size_t m_currentCellIndex;