From af2699d3623dd0c6c3fec1e2cb36b86f23ed2934 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Wed, 13 May 2015 22:42:11 +0200 Subject: [PATCH] Z-Scale working for geomech views Alligned GeoMech and Reservoir views through RimView --- .../RivReservoirViewPartMgr.h | 1 - .../ProjectDataModel/RimGeoMechView.cpp | 14 ++++-- .../ProjectDataModel/RimGeoMechView.h | 4 +- .../ProjectDataModel/RimReservoirView.cpp | 47 +++++-------------- .../ProjectDataModel/RimReservoirView.h | 4 +- ApplicationCode/ProjectDataModel/RimView.cpp | 34 ++++++++++++++ ApplicationCode/ProjectDataModel/RimView.h | 8 ++++ 7 files changed, 70 insertions(+), 42 deletions(-) diff --git a/ApplicationCode/ModelVisualization/RivReservoirViewPartMgr.h b/ApplicationCode/ModelVisualization/RivReservoirViewPartMgr.h index f5fce9e94e..b7868365f8 100644 --- a/ApplicationCode/ModelVisualization/RivReservoirViewPartMgr.h +++ b/ApplicationCode/ModelVisualization/RivReservoirViewPartMgr.h @@ -37,7 +37,6 @@ public: RivReservoirViewPartMgr(RimReservoirView * resv); cvf::Transform* scaleTransform() { return m_scaleTransform.p();} - void setScaleTransform(cvf::Mat4d scale) { m_scaleTransform->setLocalTransform(scale);} enum ReservoirGeometryCacheType { diff --git a/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp b/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp index 84dabbf083..c685f280ce 100644 --- a/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp +++ b/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp @@ -106,6 +106,8 @@ void RimGeoMechView::updateViewerWidgetWindowTitle() //-------------------------------------------------------------------------------------------------- void RimGeoMechView::loadDataAndUpdate() { + updateScaleTransform(); + if (m_geomechCase) { m_geomechCase->openGeoMechCase(); @@ -130,12 +132,10 @@ void RimGeoMechView::loadDataAndUpdate() void RimGeoMechView::updateScaleTransform() { - CVF_ASSERT(m_scaleTransform.notNull()); - cvf::Mat4d scale = cvf::Mat4d::IDENTITY; scale(2, 2) = scaleZ(); - m_scaleTransform->setLocalTransform(scale); + this->scaleTransform()->setLocalTransform(scale); if (m_viewer) m_viewer->updateCachedValuesInScene(); } @@ -406,6 +406,14 @@ bool RimGeoMechView::isTimeStepDependentDataVisible() return (cellResult->resultFieldName() != ""); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::Transform* RimGeoMechView::scaleTransform() +{ + return m_scaleTransform.p(); +} + //-------------------------------------------------------------------------------------------------- /// diff --git a/ApplicationCode/ProjectDataModel/RimGeoMechView.h b/ApplicationCode/ProjectDataModel/RimGeoMechView.h index 2f8ff53193..85331ad09d 100644 --- a/ApplicationCode/ProjectDataModel/RimGeoMechView.h +++ b/ApplicationCode/ProjectDataModel/RimGeoMechView.h @@ -67,7 +67,8 @@ public: private: virtual void createDisplayModel(); virtual void updateDisplayModelVisibility(); - void updateScaleTransform(); + virtual void updateScaleTransform(); + virtual cvf::Transform* scaleTransform(); virtual void clampCurrentTimestep(); @@ -78,6 +79,7 @@ private: virtual void resetLegendsInViewer(); void updateLegends(); + caf::PdmPointer m_geomechCase; cvf::ref m_geoMechFullModel; bool m_isGeoMechFullGenerated; diff --git a/ApplicationCode/ProjectDataModel/RimReservoirView.cpp b/ApplicationCode/ProjectDataModel/RimReservoirView.cpp index 5cd7e24fb0..6b2941cee6 100644 --- a/ApplicationCode/ProjectDataModel/RimReservoirView.cpp +++ b/ApplicationCode/ProjectDataModel/RimReservoirView.cpp @@ -188,37 +188,7 @@ void RimReservoirView::fieldChangedByUi(const caf::PdmFieldHandle* changedField, { RimView::fieldChangedByUi(changedField, oldValue, newValue); - if (changedField == &scaleZ) - { - if (scaleZ < 1) scaleZ = 1; - - // Regenerate well paths - RimOilField* oilFields = RiaApplication::instance()->project() ? RiaApplication::instance()->project()->activeOilField() : NULL; - RimWellPathCollection* wellPathCollection = (oilFields) ? oilFields->wellPathCollection() : NULL; - if (wellPathCollection) wellPathCollection->wellPathCollectionPartMgr()->scheduleGeometryRegen(); - - if (m_viewer) - { - cvf::Vec3d poi = m_viewer->pointOfInterest(); - cvf::Vec3d eye, dir, up; - eye = m_viewer->mainCamera()->position(); - dir = m_viewer->mainCamera()->direction(); - up = m_viewer->mainCamera()->up(); - - eye[2] = poi[2]*scaleZ()/m_reservoirGridPartManager->scaleTransform()->worldTransform()(2, 2) + (eye[2] - poi[2]); - poi[2] = poi[2]*scaleZ()/m_reservoirGridPartManager->scaleTransform()->worldTransform()(2, 2); - - m_viewer->mainCamera()->setFromLookAt(eye, eye + dir, up); - m_viewer->setPointOfInterest(poi); - - updateScaleTransform(); - createDisplayModelAndRedraw(); - m_viewer->update(); - } - - RiuMainWindow::instance()->updateScaleValue(); - } - else if (changedField == &showWindow) + if (changedField == &showWindow) { if (showWindow) { @@ -279,14 +249,11 @@ void RimReservoirView::fieldChangedByUi(const caf::PdmFieldHandle* changedField, void RimReservoirView::updateScaleTransform() { - CVF_ASSERT(m_reservoirGridPartManager.notNull()); - CVF_ASSERT(m_pipesPartManager.notNull()); - cvf::Mat4d scale = cvf::Mat4d::IDENTITY; scale(2, 2) = scaleZ(); - m_reservoirGridPartManager->setScaleTransform(scale); - m_pipesPartManager->setScaleTransform(m_reservoirGridPartManager->scaleTransform()); + this->scaleTransform()->setLocalTransform(scale); + m_pipesPartManager->setScaleTransform(this->scaleTransform()); if (m_viewer) m_viewer->updateCachedValuesInScene(); } @@ -1484,3 +1451,11 @@ void RimReservoirView::resetLegendsInViewer() m_viewer->addColorLegendToBottomLeftCorner(this->cellEdgeResult()->legendConfig->legend()); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::Transform* RimReservoirView::scaleTransform() +{ + return m_reservoirGridPartManager->scaleTransform(); +} + diff --git a/ApplicationCode/ProjectDataModel/RimReservoirView.h b/ApplicationCode/ProjectDataModel/RimReservoirView.h index 8d9231f83d..4a768bfc1b 100644 --- a/ApplicationCode/ProjectDataModel/RimReservoirView.h +++ b/ApplicationCode/ProjectDataModel/RimReservoirView.h @@ -143,7 +143,9 @@ private: virtual void updateCurrentTimeStep(); void indicesToVisibleGrids(std::vector* gridIndices); - void updateScaleTransform(); + virtual void updateScaleTransform(); + virtual cvf::Transform* scaleTransform(); + virtual void updateStaticCellColors(); void updateStaticCellColors(unsigned short geometryType); void updateLegends(); diff --git a/ApplicationCode/ProjectDataModel/RimView.cpp b/ApplicationCode/ProjectDataModel/RimView.cpp index 126d60ace6..9a225f6a8d 100644 --- a/ApplicationCode/ProjectDataModel/RimView.cpp +++ b/ApplicationCode/ProjectDataModel/RimView.cpp @@ -13,6 +13,10 @@ #include "cafFrameAnimationControl.h" #include +#include "RimOilField.h" +#include "RimWellPathCollection.h" +#include "RimProject.h" +#include "RivWellPathCollectionPartMgr.h" namespace caf { @@ -379,6 +383,36 @@ void RimView::fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QV updateDisplayModelVisibility(); RiuMainWindow::instance()->refreshDrawStyleActions(); } + else if (changedField == &scaleZ) + { + if (scaleZ < 1) scaleZ = 1; + + // Regenerate well paths + RimOilField* oilFields = RiaApplication::instance()->project() ? RiaApplication::instance()->project()->activeOilField() : NULL; + RimWellPathCollection* wellPathCollection = (oilFields) ? oilFields->wellPathCollection() : NULL; + if (wellPathCollection) wellPathCollection->wellPathCollectionPartMgr()->scheduleGeometryRegen(); + + if (m_viewer) + { + cvf::Vec3d poi = m_viewer->pointOfInterest(); + cvf::Vec3d eye, dir, up; + eye = m_viewer->mainCamera()->position(); + dir = m_viewer->mainCamera()->direction(); + up = m_viewer->mainCamera()->up(); + + eye[2] = poi[2]*scaleZ()/this->scaleTransform()->worldTransform()(2, 2) + (eye[2] - poi[2]); + poi[2] = poi[2]*scaleZ()/this->scaleTransform()->worldTransform()(2, 2); + + m_viewer->mainCamera()->setFromLookAt(eye, eye + dir, up); + m_viewer->setPointOfInterest(poi); + + updateScaleTransform(); + createDisplayModelAndRedraw(); + m_viewer->update(); + } + + RiuMainWindow::instance()->updateScaleValue(); + } else if (changedField == &surfaceMode) { createDisplayModel(); diff --git a/ApplicationCode/ProjectDataModel/RimView.h b/ApplicationCode/ProjectDataModel/RimView.h index d206c4fbe1..bd814b59f3 100644 --- a/ApplicationCode/ProjectDataModel/RimView.h +++ b/ApplicationCode/ProjectDataModel/RimView.h @@ -28,6 +28,11 @@ class RiuViewer; class Rim3dOverlayInfoConfig; +namespace cvf +{ + class Transform; +} + #define CAF_PDM_ABSTRACT_SOURCE_INIT(ClassName, keyword) \ bool ClassName::Error_You_forgot_to_add_the_macro_CAF_PDM_HEADER_INIT_and_or_CAF_PDM_SOURCE_INIT_to_your_cpp_file_for_this_class() { return false;} \ QString ClassName::classKeywordStatic() { assert(PdmObject::isValidXmlElementName(keyword)); return keyword; } @@ -107,6 +112,9 @@ protected: virtual void updateCurrentTimeStep() = 0; virtual void updateStaticCellColors() = 0; + virtual void updateScaleTransform() = 0; + virtual cvf::Transform* scaleTransform() = 0; + void updateViewerWidget(); virtual void updateViewerWidgetWindowTitle() = 0;