diff --git a/ApplicationCode/Application/RiaApplication.cpp b/ApplicationCode/Application/RiaApplication.cpp index c66410e092..4a932fb6ca 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" @@ -561,8 +560,18 @@ bool RiaApplication::loadProject(const QString& projectFileName, ProjectLoadActi stimPlanColors[0]->updateConductivityResultName(); } } - + 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.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..d4d365f5da 100644 --- a/ApplicationCode/ProjectDataModel/Rim3dView.h +++ b/ApplicationCode/ProjectDataModel/Rim3dView.h @@ -147,6 +147,9 @@ protected: 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 b848c785bb..08e3fb3ab2 100644 --- a/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp +++ b/ApplicationCode/ProjectDataModel/RimGeoMechView.cpp @@ -52,10 +52,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" @@ -126,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; } @@ -561,6 +562,51 @@ RigFemPartCollection* RimGeoMechView::femParts() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- +void RimGeoMechView::convertCameraPositionFromOldProjectFiles() +{ + 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(); + + { + cvf::Mat4d cameraMx = this->cameraPosition().getInverted(); + + cvf::Vec3d translation = cameraMx.translation(); + + cvf::Vec3d translationDomainCoord = diplayCoordTrans->scaleToDomainSize(translation); + translationDomainCoord -= offset; + + cvf::Vec3d newCameraTranslation = diplayCoordTrans->scaleToDisplaySize(translationDomainCoord); + + cameraMx.setTranslation(newCameraTranslation); + + 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()); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- RimGeoMechCase* RimGeoMechView::geoMechCase() { return m_geomechCase; diff --git a/ApplicationCode/ProjectDataModel/RimGeoMechView.h b/ApplicationCode/ProjectDataModel/RimGeoMechView.h index 2463ffdf51..7448bae1f0 100644 --- a/ApplicationCode/ProjectDataModel/RimGeoMechView.h +++ b/ApplicationCode/ProjectDataModel/RimGeoMechView.h @@ -99,6 +99,8 @@ public: const RigFemPartCollection* femParts() const; RigFemPartCollection* femParts(); + void convertCameraPositionFromOldProjectFiles(); + protected: virtual void defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName = "") override; virtual void onLoadDataAndUpdate() override;