From 82d6db94cb4d1df09e4d5ef6d662fb4886cd8b1e Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 18 May 2018 19:23:36 +0200 Subject: [PATCH 1/2] WIP : try to fix import of geomech project files --- .../Application/RiaApplication.cpp | 8 ++- .../ProjectDataModel/Rim3dView.cpp | 16 +++++ ApplicationCode/ProjectDataModel/Rim3dView.h | 3 + .../ProjectDataModel/RimGeoMechView.cpp | 67 ++++++++++++++++++- .../ProjectDataModel/RimGeoMechView.h | 2 + 5 files changed, 94 insertions(+), 2 deletions(-) diff --git a/ApplicationCode/Application/RiaApplication.cpp b/ApplicationCode/Application/RiaApplication.cpp index c66410e092..f51455bbdb 100644 --- a/ApplicationCode/Application/RiaApplication.cpp +++ b/ApplicationCode/Application/RiaApplication.cpp @@ -47,7 +47,6 @@ #include "RimGeoMechCellColors.h" #include "RimGeoMechModels.h" #include "RimGeoMechView.h" -#include "RimGeoMechView.h" #include "RimIdenticalGridCaseGroup.h" #include "RimMainPlotCollection.h" #include "RimObservedData.h" @@ -562,7 +561,14 @@ bool RiaApplication::loadProject(const QString& projectFileName, ProjectLoadActi } } + auto* geoView = dynamic_cast(riv); + if (geoView) + { + geoView->updateDisplayModelCoordinates(); + } + riv->loadDataAndUpdate(); + this->setActiveReservoirView(riv); RimGridView* rigv = dynamic_cast(riv); diff --git a/ApplicationCode/ProjectDataModel/Rim3dView.cpp b/ApplicationCode/ProjectDataModel/Rim3dView.cpp index 167ae37887..4a6399938b 100644 --- a/ApplicationCode/ProjectDataModel/Rim3dView.cpp +++ b/ApplicationCode/ProjectDataModel/Rim3dView.cpp @@ -834,6 +834,22 @@ cvf::ref Rim3dView::displayCoordTransform() const return coordTrans; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::Mat4d Rim3dView::cameraPosition() const +{ + return m_cameraPosition(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::Vec3d Rim3dView::cameraPointOfInterest() const +{ + return m_cameraPointOfInterest(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Rim3dView.h b/ApplicationCode/ProjectDataModel/Rim3dView.h index b96923292d..7846fec34b 100644 --- a/ApplicationCode/ProjectDataModel/Rim3dView.h +++ b/ApplicationCode/ProjectDataModel/Rim3dView.h @@ -141,6 +141,9 @@ public: virtual RimCase* ownerCase() const = 0; virtual std::vector legendConfigs() const = 0; + cvf::Mat4d cameraPosition() const; + cvf::Vec3d cameraPointOfInterest() const; + protected: static void removeModelByName(cvf::Scene* scene, const cvf::String& modelName); diff --git a/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp b/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp index b848c785bb..04464a4639 100644 --- a/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp +++ b/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp @@ -20,6 +20,7 @@ #include "RimGeoMechView.h" #include "RiaApplication.h" +#include "RiaLogging.h" #include "RiaPreferences.h" #include "RigFemPartCollection.h" @@ -36,6 +37,7 @@ #include "RimGeoMechPropertyFilterCollection.h" #include "RimGridCollection.h" #include "RimIntersectionCollection.h" +#include "RimProject.h" #include "RimRegularLegendConfig.h" #include "RimTensorResults.h" #include "RimViewLinker.h" @@ -52,10 +54,11 @@ #include "cafCadNavigation.h" #include "cafCeetronPlusNavigation.h" +#include "cafDisplayCoordTransform.h" #include "cafFrameAnimationControl.h" +#include "cafOverlayScalarMapperLegend.h" #include "cafPdmUiTreeOrdering.h" #include "cafProgressInfo.h" -#include "cafOverlayScalarMapperLegend.h" #include "cvfModelBasicList.h" #include "cvfPart.h" @@ -561,6 +564,68 @@ RigFemPartCollection* RimGeoMechView::femParts() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- +void RimGeoMechView::updateDisplayModelCoordinates() +{ + RimProject* proj = nullptr; + this->firstAncestorOrThisOfType(proj); + if (!proj) return; + + if (proj->isProjectFileVersionEqualOrOlderThan("2018.1.1.110")) + { + auto geoMechCase = this->geoMechCase(); + if (geoMechCase) + { + std::string errorMessage; + if (!geoMechCase->openGeoMechCase(&errorMessage)) + { + QString displayMessage = errorMessage.empty() ? "Could not open the Odb file: \n" + geoMechCase->caseFileName() + : QString::fromStdString(errorMessage); + + RiaLogging::error(displayMessage); + } + else + { + // Up-cast to get access to public interface for camera functions + RimCase* rimCase = geoMechCase; + RiuViewerToViewInterface* viewerToViewInterface = this; + auto offset = -rimCase->displayModelOffset(); + + auto diplayCoordTrans = this->displayCoordTransform(); + +/* Does not work as expected + + { + auto pointOfInterest = this->cameraPointOfInterest(); + + auto pointOfInterestDomain = diplayCoordTrans->scaleToDomainSize(pointOfInterest); + pointOfInterestDomain += offset; + + auto newPointOfInterest = diplayCoordTrans->transformToDisplayCoord(pointOfInterestDomain); + + viewerToViewInterface->setCameraPointOfInterest(newPointOfInterest); + } + + { + auto cameraPosition = this->cameraPosition(); + auto translation = cameraPosition.translation(); + + auto translationDomainCoord = diplayCoordTrans->scaleToDomainSize(translation); + translationDomainCoord += offset; + + auto newCameraPosition = diplayCoordTrans->transformToDisplayCoord(translationDomainCoord); + + cameraPosition.setTranslation(newCameraPosition); + viewerToViewInterface->setCameraPosition(cameraPosition); + } +*/ + } + } + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- RimGeoMechCase* RimGeoMechView::geoMechCase() { return m_geomechCase; diff --git a/ApplicationCode/ProjectDataModel/RimGeoMechView.h b/ApplicationCode/ProjectDataModel/RimGeoMechView.h index 2463ffdf51..316176001f 100644 --- a/ApplicationCode/ProjectDataModel/RimGeoMechView.h +++ b/ApplicationCode/ProjectDataModel/RimGeoMechView.h @@ -99,6 +99,8 @@ public: const RigFemPartCollection* femParts() const; RigFemPartCollection* femParts(); + void updateDisplayModelCoordinates(); + protected: virtual void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "") override; virtual void onLoadDataAndUpdate() override; From d7cffba9f18c253759f17d7ebda20e2633891016 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jacob=20St=C3=B8ren?= Date: Fri, 18 May 2018 21:38:49 +0200 Subject: [PATCH 2/2] #2940 Covert old project file geomech camera mx to new display offsetted regime --- .../Application/RiaApplication.cpp | 17 ++-- ApplicationCode/ProjectDataModel/Rim3dView.h | 6 +- .../ProjectDataModel/RimGeoMechView.cpp | 83 +++++++------------ .../ProjectDataModel/RimGeoMechView.h | 2 +- 4 files changed, 46 insertions(+), 62 deletions(-) diff --git a/ApplicationCode/Application/RiaApplication.cpp b/ApplicationCode/Application/RiaApplication.cpp index f51455bbdb..4a932fb6ca 100644 --- a/ApplicationCode/Application/RiaApplication.cpp +++ b/ApplicationCode/Application/RiaApplication.cpp @@ -560,15 +560,18 @@ bool RiaApplication::loadProject(const QString& projectFileName, ProjectLoadActi stimPlanColors[0]->updateConductivityResultName(); } } - - auto* geoView = dynamic_cast(riv); - if (geoView) - { - geoView->updateDisplayModelCoordinates(); - } - + riv->loadDataAndUpdate(); + if ( m_project->isProjectFileVersionEqualOrOlderThan("2018.1.1.110") ) + { + auto* geoView = dynamic_cast(riv); + if ( geoView ) + { + geoView->convertCameraPositionFromOldProjectFiles(); + } + } + this->setActiveReservoirView(riv); RimGridView* rigv = dynamic_cast(riv); diff --git a/ApplicationCode/ProjectDataModel/Rim3dView.h b/ApplicationCode/ProjectDataModel/Rim3dView.h index 7846fec34b..d4d365f5da 100644 --- a/ApplicationCode/ProjectDataModel/Rim3dView.h +++ b/ApplicationCode/ProjectDataModel/Rim3dView.h @@ -141,15 +141,15 @@ public: virtual RimCase* ownerCase() const = 0; virtual std::vector legendConfigs() const = 0; - cvf::Mat4d cameraPosition() const; - cvf::Vec3d cameraPointOfInterest() const; - protected: static void removeModelByName(cvf::Scene* scene, const cvf::String& modelName); virtual void setDefaultView(); void disableGridBoxField(); void disablePerspectiveProjectionField(); + cvf::Mat4d cameraPosition() const; + cvf::Vec3d cameraPointOfInterest() const; + RimWellPathCollection* wellPathCollection() const; void addWellPathsToModel(cvf::ModelBasicList* wellPathModelBasicList, diff --git a/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp b/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp index 04464a4639..08e3fb3ab2 100644 --- a/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp +++ b/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp @@ -20,7 +20,6 @@ #include "RimGeoMechView.h" #include "RiaApplication.h" -#include "RiaLogging.h" #include "RiaPreferences.h" #include "RigFemPartCollection.h" @@ -37,7 +36,6 @@ #include "RimGeoMechPropertyFilterCollection.h" #include "RimGridCollection.h" #include "RimIntersectionCollection.h" -#include "RimProject.h" #include "RimRegularLegendConfig.h" #include "RimTensorResults.h" #include "RimViewLinker.h" @@ -129,8 +127,8 @@ void RimGeoMechView::onLoadDataAndUpdate() QString displayMessage = errorMessage.empty() ? "Could not open the Odb file: \n" + m_geomechCase->caseFileName() : QString::fromStdString(errorMessage); QMessageBox::warning(Riu3DMainWindowTools::mainWindowWidget(), - "File open error", - displayMessage); + "File open error", + displayMessage); m_geomechCase = nullptr; return; } @@ -564,62 +562,45 @@ RigFemPartCollection* RimGeoMechView::femParts() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RimGeoMechView::updateDisplayModelCoordinates() +void RimGeoMechView::convertCameraPositionFromOldProjectFiles() { - RimProject* proj = nullptr; - this->firstAncestorOrThisOfType(proj); - if (!proj) return; - - if (proj->isProjectFileVersionEqualOrOlderThan("2018.1.1.110")) + auto geoMechCase = this->geoMechCase(); + if ( geoMechCase ) { - auto geoMechCase = this->geoMechCase(); - if (geoMechCase) + // Up-cast to get access to public interface for camera functions + RimCase* rimCase = geoMechCase; + RiuViewerToViewInterface* viewerToViewInterface = this; + cvf::Vec3d offset = rimCase->displayModelOffset(); + auto diplayCoordTrans = this->displayCoordTransform(); + { - std::string errorMessage; - if (!geoMechCase->openGeoMechCase(&errorMessage)) - { - QString displayMessage = errorMessage.empty() ? "Could not open the Odb file: \n" + geoMechCase->caseFileName() - : QString::fromStdString(errorMessage); + cvf::Mat4d cameraMx = this->cameraPosition().getInverted(); - RiaLogging::error(displayMessage); - } - else - { - // Up-cast to get access to public interface for camera functions - RimCase* rimCase = geoMechCase; - RiuViewerToViewInterface* viewerToViewInterface = this; - auto offset = -rimCase->displayModelOffset(); + cvf::Vec3d translation = cameraMx.translation(); - auto diplayCoordTrans = this->displayCoordTransform(); + cvf::Vec3d translationDomainCoord = diplayCoordTrans->scaleToDomainSize(translation); + translationDomainCoord -= offset; -/* Does not work as expected + cvf::Vec3d newCameraTranslation = diplayCoordTrans->scaleToDisplaySize(translationDomainCoord); - { - auto pointOfInterest = this->cameraPointOfInterest(); + cameraMx.setTranslation(newCameraTranslation); - auto pointOfInterestDomain = diplayCoordTrans->scaleToDomainSize(pointOfInterest); - pointOfInterestDomain += offset; - - auto newPointOfInterest = diplayCoordTrans->transformToDisplayCoord(pointOfInterestDomain); - - viewerToViewInterface->setCameraPointOfInterest(newPointOfInterest); - } - - { - auto cameraPosition = this->cameraPosition(); - auto translation = cameraPosition.translation(); - - auto translationDomainCoord = diplayCoordTrans->scaleToDomainSize(translation); - translationDomainCoord += offset; - - auto newCameraPosition = diplayCoordTrans->transformToDisplayCoord(translationDomainCoord); - - cameraPosition.setTranslation(newCameraPosition); - viewerToViewInterface->setCameraPosition(cameraPosition); - } -*/ - } + viewerToViewInterface->setCameraPosition(cameraMx.getInverted()); } + + { + cvf::Vec3d pointOfInterest = this->cameraPointOfInterest(); + + cvf::Vec3d pointOfInterestDomain = diplayCoordTrans->scaleToDomainSize(pointOfInterest); + pointOfInterestDomain -= offset; + + cvf::Vec3d newPointOfInterest = diplayCoordTrans->scaleToDisplaySize(pointOfInterestDomain); + + viewerToViewInterface->setCameraPointOfInterest(newPointOfInterest); + } + + m_viewer->mainCamera()->setViewMatrix( this->cameraPosition()); + m_viewer->setPointOfInterest(this->cameraPointOfInterest()); } } diff --git a/ApplicationCode/ProjectDataModel/RimGeoMechView.h b/ApplicationCode/ProjectDataModel/RimGeoMechView.h index 316176001f..7448bae1f0 100644 --- a/ApplicationCode/ProjectDataModel/RimGeoMechView.h +++ b/ApplicationCode/ProjectDataModel/RimGeoMechView.h @@ -99,7 +99,7 @@ public: const RigFemPartCollection* femParts() const; RigFemPartCollection* femParts(); - void updateDisplayModelCoordinates(); + void convertCameraPositionFromOldProjectFiles(); protected: virtual void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "") override;