2018-01-09 03:11:28 -06:00
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2015- Statoil ASA
// Copyright (C) 2015- Ceetron Solutions AS
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
# include "Rim3dView.h"
# include "RiaApplication.h"
# include "RiaPreferences.h"
2018-01-12 04:31:01 -06:00
# include "RiaViewRedrawScheduler.h"
2018-01-09 03:11:28 -06:00
2018-10-11 09:03:49 -05:00
# include "Rim3dWellLogCurve.h"
2018-04-04 15:34:41 -05:00
# include "RimCase.h"
2018-01-16 02:37:08 -06:00
# include "RimGridView.h"
2018-01-09 03:11:28 -06:00
# include "RimMainPlotCollection.h"
# include "RimProject.h"
2018-06-26 03:12:49 -05:00
# include "RimTools.h"
2018-01-09 03:11:28 -06:00
# include "RimViewController.h"
# include "RimViewLinker.h"
# include "RimWellPathCollection.h"
2018-02-05 07:11:23 -06:00
# include "RivWellPathsPartMgr.h"
2018-01-09 03:11:28 -06:00
# include "RiuMainWindow.h"
# include "RiuViewer.h"
# include "RiuTimeStepChangedHandler.h"
# include "cafDisplayCoordTransform.h"
# include "cafFrameAnimationControl.h"
# include "cvfCamera.h"
# include "cvfModelBasicList.h"
# include "cvfPart.h"
2018-01-16 02:37:08 -06:00
# include "cvfTransform.h"
2018-01-09 03:11:28 -06:00
# include "cvfViewport.h"
2018-01-16 04:21:02 -06:00
# include <climits>
2018-03-13 10:16:41 -05:00
# include "cvfScene.h"
2018-01-09 03:11:28 -06:00
namespace caf {
template < >
void caf : : AppEnum < Rim3dView : : MeshModeType > : : setUp ( )
{
addItem ( Rim3dView : : FULL_MESH , " FULL_MESH " , " All " ) ;
addItem ( Rim3dView : : FAULTS_MESH , " FAULTS_MESH " , " Faults only " ) ;
addItem ( Rim3dView : : NO_MESH , " NO_MESH " , " None " ) ;
setDefault ( Rim3dView : : FULL_MESH ) ;
}
template < >
void caf : : AppEnum < Rim3dView : : SurfaceModeType > : : setUp ( )
{
addItem ( Rim3dView : : SURFACE , " SURFACE " , " All " ) ;
addItem ( Rim3dView : : FAULTS , " FAULTS " , " Faults only " ) ;
addItem ( Rim3dView : : NO_SURFACE , " NO_SURFACE " , " None " ) ;
setDefault ( Rim3dView : : SURFACE ) ;
}
} // End namespace caf
CAF_PDM_XML_ABSTRACT_SOURCE_INIT ( Rim3dView , " GenericView " ) ; // Do not use. Abstract class
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
Rim3dView : : Rim3dView ( void )
{
RiaApplication * app = RiaApplication : : instance ( ) ;
RiaPreferences * preferences = app - > preferences ( ) ;
CVF_ASSERT ( preferences ) ;
2018-09-24 15:15:34 -05:00
CAF_PDM_InitField ( & m_name , " UserDescription " , QString ( " " ) , " Name " , " " , " " , " " ) ;
2018-01-09 03:11:28 -06:00
2018-01-11 05:59:52 -06:00
CAF_PDM_InitField ( & m_cameraPosition , " CameraPosition " , cvf : : Mat4d : : IDENTITY , " " , " " , " " , " " ) ;
m_cameraPosition . uiCapability ( ) - > setUiHidden ( true ) ;
2018-01-09 03:11:28 -06:00
2018-01-11 05:59:52 -06:00
CAF_PDM_InitField ( & m_cameraPointOfInterest , " CameraPointOfInterest " , cvf : : Vec3d : : ZERO , " " , " " , " " , " " ) ;
m_cameraPointOfInterest . uiCapability ( ) - > setUiHidden ( true ) ;
2018-01-09 03:11:28 -06:00
CAF_PDM_InitField ( & isPerspectiveView , " PerspectiveProjection " , true , " Perspective Projection " , " " , " " , " " ) ;
double defaultScaleFactor = preferences - > defaultScaleFactorZ ;
CAF_PDM_InitField ( & scaleZ , " GridZScale " , defaultScaleFactor , " Z Scale " , " " , " Scales the scene in the Z direction " , " " ) ;
cvf : : Color3f defBackgColor = preferences - > defaultViewerBackgroundColor ( ) ;
2018-01-11 05:59:52 -06:00
CAF_PDM_InitField ( & m_backgroundColor , " ViewBackgroundColor " , defBackgColor , " Background " , " " , " " , " " ) ;
2018-01-09 03:11:28 -06:00
CAF_PDM_InitField ( & maximumFrameRate , " MaximumFrameRate " , 10 , " Maximum Frame Rate " , " " , " " , " " ) ;
maximumFrameRate . uiCapability ( ) - > setUiHidden ( true ) ;
CAF_PDM_InitField ( & hasUserRequestedAnimation , " AnimationMode " , false , " Animation Mode " , " " , " " , " " ) ;
hasUserRequestedAnimation . uiCapability ( ) - > setUiHidden ( true ) ;
CAF_PDM_InitField ( & m_currentTimeStep , " CurrentTimeStep " , 0 , " Current Time Step " , " " , " " , " " ) ;
m_currentTimeStep . uiCapability ( ) - > setUiHidden ( true ) ;
caf : : AppEnum < Rim3dView : : MeshModeType > defaultMeshType = NO_MESH ;
if ( preferences - > defaultGridLines ) defaultMeshType = FULL_MESH ;
CAF_PDM_InitField ( & meshMode , " MeshMode " , defaultMeshType , " Grid Lines " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( & surfaceMode , " SurfaceMode " , " Grid Surface " , " " , " " , " " ) ;
2018-01-25 10:37:22 -06:00
CAF_PDM_InitField ( & m_showGridBox , " ShowGridBox " , true , " Show Grid Box " , " " , " " , " " ) ;
2018-01-09 03:11:28 -06:00
CAF_PDM_InitField ( & m_disableLighting , " DisableLighting " , false , " Disable Results Lighting " , " " , " Disable light model for scalar result colors " , " " ) ;
m_crossSectionVizModel = new cvf : : ModelBasicList ;
m_crossSectionVizModel - > setName ( " CrossSectionModel " ) ;
m_highlightVizModel = new cvf : : ModelBasicList ;
m_highlightVizModel - > setName ( " HighlightModel " ) ;
m_wellPathPipeVizModel = new cvf : : ModelBasicList ;
m_wellPathPipeVizModel - > setName ( " WellPathPipeModel " ) ;
2018-02-05 07:11:23 -06:00
m_wellPathsPartManager = new RivWellPathsPartMgr ( this ) ;
2018-01-09 03:11:28 -06:00
this - > setAs3DViewMdiWindow ( ) ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
Rim3dView : : ~ Rim3dView ( void )
{
removeMdiWindowFromMdiArea ( ) ;
deleteViewWidget ( ) ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2018-09-12 03:04:15 -05:00
RiuViewer * Rim3dView : : viewer ( ) const
2018-01-09 03:11:28 -06:00
{
return m_viewer ;
}
2018-09-24 15:15:34 -05:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : setName ( const QString & name )
{
m_name = name ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString Rim3dView : : name ( ) const
{
return m_name ;
}
2018-01-09 03:11:28 -06:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QWidget * Rim3dView : : createViewWidget ( QWidget * mainWindowParent )
{
QGLFormat glFormat ;
glFormat . setDirectRendering ( RiaApplication : : instance ( ) - > useShaders ( ) ) ;
2018-02-18 11:56:43 -06:00
m_viewer = new RiuViewer ( glFormat , nullptr ) ;
2018-01-09 03:11:28 -06:00
m_viewer - > setOwnerReservoirView ( this ) ;
2018-01-11 05:59:52 -06:00
cvf : : String xLabel ;
cvf : : String yLabel ;
cvf : : String zLabel ;
this - > axisLabels ( & xLabel , & yLabel , & zLabel ) ;
m_viewer - > setAxisLabels ( xLabel , yLabel , zLabel ) ;
2018-01-09 03:11:28 -06:00
return m_viewer - > layoutWidget ( ) ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : updateViewWidgetAfterCreation ( )
{
m_viewer - > setDefaultPerspectiveNearPlaneDistance ( 10 ) ;
this - > resetLegendsInViewer ( ) ;
m_viewer - > updateNavigationPolicy ( ) ;
m_viewer - > enablePerfInfoHud ( RiaApplication : : instance ( ) - > showPerformanceInfo ( ) ) ;
2018-01-11 05:59:52 -06:00
m_viewer - > mainCamera ( ) - > setViewMatrix ( m_cameraPosition ) ;
m_viewer - > setPointOfInterest ( m_cameraPointOfInterest ( ) ) ;
2018-01-09 03:11:28 -06:00
m_viewer - > enableParallelProjection ( ! isPerspectiveView ( ) ) ;
m_viewer - > mainCamera ( ) - > viewport ( ) - > setClearColor ( cvf : : Color4f ( backgroundColor ( ) ) ) ;
this - > updateGridBoxData ( ) ;
this - > updateAnnotationItems ( ) ;
this - > createHighlightAndGridBoxDisplayModel ( ) ;
m_viewer - > update ( ) ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : updateMdiWindowTitle ( )
{
if ( m_viewer )
{
QString windowTitle ;
if ( ownerCase ( ) )
{
2018-09-24 15:15:34 -05:00
windowTitle = QString ( " %1 - %2 " ) . arg ( ownerCase ( ) - > caseUserDescription ( ) ) . arg ( m_name ) ;
2018-01-09 03:11:28 -06:00
}
else
{
2018-09-24 15:15:34 -05:00
windowTitle = m_name ;
2018-01-09 03:11:28 -06:00
}
m_viewer - > layoutWidget ( ) - > setWindowTitle ( windowTitle ) ;
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : deleteViewWidget ( )
{
if ( m_viewer )
{
m_viewer - > deleteLater ( ) ;
m_viewer = nullptr ;
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : defineUiOrdering ( QString uiConfigName , caf : : PdmUiOrdering & uiOrdering )
{
caf : : PdmUiGroup * viewGroup = uiOrdering . addNewGroup ( " Viewer " ) ;
2018-09-24 15:15:34 -05:00
viewGroup - > add ( & m_name ) ;
2018-01-11 05:59:52 -06:00
viewGroup - > add ( & m_backgroundColor ) ;
2018-01-25 10:37:22 -06:00
viewGroup - > add ( & m_showGridBox ) ;
2018-01-09 03:11:28 -06:00
viewGroup - > add ( & isPerspectiveView ) ;
viewGroup - > add ( & m_disableLighting ) ;
caf : : PdmUiGroup * gridGroup = uiOrdering . addNewGroup ( " Grid Appearance " ) ;
gridGroup - > add ( & scaleZ ) ;
gridGroup - > add ( & meshMode ) ;
gridGroup - > add ( & surfaceMode ) ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QImage Rim3dView : : snapshotWindowContent ( )
{
if ( m_viewer )
{
// Force update of scheduled display models before snapshotting
2018-05-21 16:46:35 -05:00
RiaViewRedrawScheduler : : instance ( ) - > updateAndRedrawScheduledViews ( ) ;
2018-01-09 03:11:28 -06:00
m_viewer - > repaint ( ) ;
return m_viewer - > snapshotImage ( ) ;
}
return QImage ( ) ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : scheduleCreateDisplayModelAndRedraw ( )
{
2018-01-12 04:31:01 -06:00
RiaViewRedrawScheduler : : instance ( ) - > scheduleDisplayModelUpdateAndRedraw ( this ) ;
2018-01-09 03:11:28 -06:00
if ( this - > isMasterView ( ) )
{
RimViewLinker * viewLinker = this - > assosiatedViewLinker ( ) ;
if ( viewLinker )
{
viewLinker - > scheduleCreateDisplayModelAndRedrawForDependentViews ( ) ;
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : setCurrentTimeStepAndUpdate ( int frameIndex )
{
setCurrentTimeStep ( frameIndex ) ;
this - > updateCurrentTimeStep ( ) ;
RimProject * project ;
firstAncestorOrThisOfTypeAsserted ( project ) ;
project - > mainPlotCollection ( ) - > updateCurrentTimeStepInPlots ( ) ;
}
2018-01-11 05:59:52 -06:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString Rim3dView : : timeStepName ( int frameIdx ) const
{
return this - > ownerCase ( ) - > timeStepName ( frameIdx ) ;
}
2018-01-09 03:11:28 -06:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : setCurrentTimeStep ( int frameIndex )
{
const int oldTimeStep = m_currentTimeStep ;
m_currentTimeStep = frameIndex ;
clampCurrentTimestep ( ) ;
if ( m_currentTimeStep ! = oldTimeStep )
{
RiuTimeStepChangedHandler : : instance ( ) - > handleTimeStepChanged ( this ) ;
2018-01-15 07:52:22 -06:00
this - > onTimeStepChanged ( ) ;
2018-01-09 03:11:28 -06:00
}
this - > hasUserRequestedAnimation = true ;
2018-01-15 07:52:22 -06:00
2018-01-09 03:11:28 -06:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : updateCurrentTimeStepAndRedraw ( )
{
this - > updateCurrentTimeStep ( ) ;
RimProject * project ;
firstAncestorOrThisOfTypeAsserted ( project ) ;
project - > mainPlotCollection ( ) - > updateCurrentTimeStepInPlots ( ) ;
if ( m_viewer ) m_viewer - > update ( ) ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : createDisplayModelAndRedraw ( )
{
if ( m_viewer )
{
this - > clampCurrentTimestep ( ) ;
createDisplayModel ( ) ;
createHighlightAndGridBoxDisplayModel ( ) ;
updateDisplayModelVisibility ( ) ;
2018-01-11 05:59:52 -06:00
if ( m_cameraPosition ( ) . isIdentity ( ) )
2018-01-09 03:11:28 -06:00
{
setDefaultView ( ) ;
2018-01-11 05:59:52 -06:00
m_cameraPosition = m_viewer - > mainCamera ( ) - > viewMatrix ( ) ;
m_cameraPointOfInterest = m_viewer - > pointOfInterest ( ) ;
2018-01-09 03:11:28 -06:00
}
}
RiuMainWindow : : instance ( ) - > refreshAnimationActions ( ) ;
}
//--------------------------------------------------------------------------------------------------
2018-03-13 10:16:41 -05:00
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : removeModelByName ( cvf : : Scene * scene , const cvf : : String & modelName )
{
std : : vector < cvf : : Model * > modelsToBeRemoved ;
for ( cvf : : uint i = 0 ; i < scene - > modelCount ( ) ; i + + )
{
if ( scene - > model ( i ) - > name ( ) = = modelName )
{
modelsToBeRemoved . push_back ( scene - > model ( i ) ) ;
}
}
for ( size_t i = 0 ; i < modelsToBeRemoved . size ( ) ; i + + )
{
scene - > removeModel ( modelsToBeRemoved [ i ] ) ;
}
}
//--------------------------------------------------------------------------------------------------
2018-01-09 03:11:28 -06:00
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : setDefaultView ( )
{
if ( m_viewer )
{
m_viewer - > setDefaultView ( ) ;
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : endAnimation ( )
{
this - > hasUserRequestedAnimation = false ;
this - > updateStaticCellColors ( ) ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2018-01-31 08:53:02 -06:00
RimWellPathCollection * Rim3dView : : wellPathCollection ( ) const
2018-01-09 03:11:28 -06:00
{
2018-06-26 03:12:49 -05:00
return RimTools : : wellPathCollection ( ) ;
2018-01-09 03:11:28 -06:00
}
2018-09-03 07:52:00 -05:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool Rim3dView : : hasVisibleTimeStepDependent3dWellLogCurves ( ) const
{
std : : vector < Rim3dWellLogCurve * > wellLogCurves ;
wellPathCollection ( ) - > descendantsIncludingThisOfType ( wellLogCurves ) ;
for ( const Rim3dWellLogCurve * curve : wellLogCurves )
{
2018-09-04 05:57:55 -05:00
if ( curve - > showInView ( this ) & & curve - > isShowingTimeDependentResult ( ) )
2018-09-03 07:52:00 -05:00
{
return true ;
}
}
return false ;
}
2018-01-09 03:11:28 -06:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : setupBeforeSave ( )
{
if ( m_viewer )
{
hasUserRequestedAnimation = m_viewer - > isAnimationActive ( ) ; // JJS: This is not conceptually correct. The variable is updated as we go, and store the user intentions. But I guess that in practice...
2018-01-11 05:59:52 -06:00
m_cameraPosition = m_viewer - > mainCamera ( ) - > viewMatrix ( ) ;
m_cameraPointOfInterest = m_viewer - > pointOfInterest ( ) ;
2018-01-09 03:11:28 -06:00
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : setMeshOnlyDrawstyle ( )
{
2018-04-04 15:34:41 -05:00
meshMode . setValueWithFieldChanged ( FULL_MESH ) ;
2018-01-09 03:11:28 -06:00
surfaceMode . setValueWithFieldChanged ( NO_SURFACE ) ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : setMeshSurfDrawstyle ( )
{
2018-04-04 15:34:41 -05:00
surfaceMode . setValueWithFieldChanged ( SURFACE ) ;
meshMode . setValueWithFieldChanged ( FULL_MESH ) ;
2018-01-09 03:11:28 -06:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : setFaultMeshSurfDrawstyle ( )
{
2018-04-04 15:34:41 -05:00
surfaceMode . setValueWithFieldChanged ( SURFACE ) ;
2018-01-09 03:11:28 -06:00
meshMode . setValueWithFieldChanged ( FAULTS_MESH ) ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : setSurfOnlyDrawstyle ( )
{
2018-04-04 15:34:41 -05:00
surfaceMode . setValueWithFieldChanged ( SURFACE ) ;
2018-01-09 03:11:28 -06:00
meshMode . setValueWithFieldChanged ( NO_MESH ) ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : setSurfaceDrawstyle ( )
{
if ( surfaceMode ( ) ! = NO_SURFACE ) surfaceMode . setValueWithFieldChanged ( SURFACE ) ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : disableLighting ( bool disable )
{
m_disableLighting = disable ;
updateCurrentTimeStepAndRedraw ( ) ;
updateConnectedEditors ( ) ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool Rim3dView : : isLightingDisabled ( ) const
{
return m_disableLighting ( ) ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : fieldChangedByUi ( const caf : : PdmFieldHandle * changedField , const QVariant & oldValue , const QVariant & newValue )
{
RimViewWindow : : fieldChangedByUi ( changedField , oldValue , newValue ) ;
if ( changedField = = & meshMode )
{
createDisplayModel ( ) ;
updateDisplayModelVisibility ( ) ;
RiuMainWindow : : instance ( ) - > refreshDrawStyleActions ( ) ;
RiuMainWindow : : instance ( ) - > refreshAnimationActions ( ) ;
}
else if ( changedField = = & isPerspectiveView )
{
if ( m_viewer ) m_viewer - > enableParallelProjection ( ! isPerspectiveView ( ) ) ;
}
else if ( changedField = = & scaleZ )
{
if ( scaleZ < 1 ) scaleZ = 1 ;
this - > updateGridBoxData ( ) ;
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 ( ) ;
2018-01-15 07:52:22 -06:00
2018-01-09 03:11:28 -06:00
}
RiuMainWindow : : instance ( ) - > updateScaleValue ( ) ;
}
else if ( changedField = = & surfaceMode )
{
createDisplayModel ( ) ;
updateDisplayModelVisibility ( ) ;
RiuMainWindow : : instance ( ) - > refreshDrawStyleActions ( ) ;
RiuMainWindow : : instance ( ) - > refreshAnimationActions ( ) ;
}
2018-01-25 10:37:22 -06:00
else if ( changedField = = & m_showGridBox )
2018-01-09 03:11:28 -06:00
{
createHighlightAndGridBoxDisplayModelWithRedraw ( ) ;
}
else if ( changedField = = & m_disableLighting )
{
createDisplayModel ( ) ;
RiuMainWindow : : instance ( ) - > refreshDrawStyleActions ( ) ;
RiuMainWindow : : instance ( ) - > refreshAnimationActions ( ) ;
}
2018-09-24 15:15:34 -05:00
else if ( changedField = = & m_name )
2018-01-09 03:11:28 -06:00
{
updateMdiWindowTitle ( ) ;
if ( viewController ( ) )
{
viewController ( ) - > updateDisplayNameAndIcon ( ) ;
viewController ( ) - > updateConnectedEditors ( ) ;
}
else
{
if ( isMasterView ( ) )
{
assosiatedViewLinker ( ) - > updateUiNameAndIcon ( ) ;
assosiatedViewLinker ( ) - > updateConnectedEditors ( ) ;
}
}
}
else if ( changedField = = & m_currentTimeStep )
{
if ( m_viewer )
{
m_viewer - > update ( ) ;
2018-01-15 07:52:22 -06:00
2018-01-09 03:11:28 -06:00
}
}
2018-01-11 05:59:52 -06:00
else if ( changedField = = & m_backgroundColor )
2018-01-09 03:11:28 -06:00
{
2018-04-06 04:52:29 -05:00
this - > applyBackgroundColor ( ) ;
2018-01-09 03:11:28 -06:00
}
else if ( changedField = = & maximumFrameRate )
{
// !! Use cvf::UNDEFINED_INT or something if we end up with frame rate 0?
// !! Should be able to specify legal range for number properties
if ( m_viewer )
{
2018-04-19 06:12:28 -05:00
m_viewer - > animationControl ( ) - > setTimeout ( maximumFrameRate ! = 0 ? 1000 / maximumFrameRate : std : : numeric_limits < int > : : max ( ) ) ;
2018-01-09 03:11:28 -06:00
}
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : addWellPathsToModel ( cvf : : ModelBasicList * wellPathModelBasicList ,
const cvf : : BoundingBox & wellPathClipBoundingBox )
{
if ( ! this - > ownerCase ( ) ) return ;
cvf : : ref < caf : : DisplayCoordTransform > transForm = displayCoordTransform ( ) ;
2018-02-05 07:11:23 -06:00
m_wellPathsPartManager - > appendStaticGeometryPartsToModel ( wellPathModelBasicList ,
2018-03-16 05:21:57 -05:00
transForm . p ( ) ,
2018-02-05 07:11:23 -06:00
this - > ownerCase ( ) - > characteristicCellSize ( ) ,
2018-03-16 05:21:57 -05:00
wellPathClipBoundingBox ) ;
2018-01-09 03:11:28 -06:00
wellPathModelBasicList - > updateBoundingBoxesRecursive ( ) ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : addDynamicWellPathsToModel ( cvf : : ModelBasicList * wellPathModelBasicList , const cvf : : BoundingBox & wellPathClipBoundingBox )
{
if ( ! this - > ownerCase ( ) ) return ;
cvf : : ref < caf : : DisplayCoordTransform > transForm = displayCoordTransform ( ) ;
2018-03-16 05:21:57 -05:00
size_t timeStepIndex = currentTimeStep ( ) ;
2018-02-05 07:11:23 -06:00
m_wellPathsPartManager - > appendDynamicGeometryPartsToModel ( wellPathModelBasicList ,
2018-03-16 05:21:57 -05:00
timeStepIndex ,
transForm . p ( ) ,
2018-03-12 08:08:45 -05:00
this - > ownerCase ( ) - > characteristicCellSize ( ) ,
2018-03-16 05:21:57 -05:00
wellPathClipBoundingBox ) ;
2018-01-09 03:11:28 -06:00
wellPathModelBasicList - > updateBoundingBoxesRecursive ( ) ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2018-09-24 15:42:13 -05:00
void Rim3dView : : setScaleZAndUpdate ( double scalingFactor )
2018-01-09 03:11:28 -06:00
{
2018-09-24 15:42:13 -05:00
this - > scaleZ = scalingFactor ;
2018-01-09 03:11:28 -06:00
updateScaleTransform ( ) ;
this - > updateGridBoxData ( ) ;
this - > scheduleCreateDisplayModelAndRedraw ( ) ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool Rim3dView : : isMasterView ( ) const
{
RimViewLinker * viewLinker = this - > assosiatedViewLinker ( ) ;
if ( viewLinker & & this = = viewLinker - > masterView ( ) )
{
return true ;
}
return false ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : updateGridBoxData ( )
{
2018-01-11 05:59:52 -06:00
if ( m_viewer & & ownerCase ( ) )
2018-01-09 03:11:28 -06:00
{
2018-01-11 05:59:52 -06:00
m_viewer - > updateGridBoxData ( scaleZ ( ) ,
ownerCase ( ) - > displayModelOffset ( ) ,
backgroundColor ( ) ,
showActiveCellsOnly ( ) ? ownerCase ( ) - > activeCellsBoundingBox ( )
: ownerCase ( ) - > allCellsBoundingBox ( )
) ;
2018-01-09 03:11:28 -06:00
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : updateAnnotationItems ( )
{
if ( m_viewer )
{
m_viewer - > updateAnnotationItems ( ) ;
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : createHighlightAndGridBoxDisplayModelWithRedraw ( )
{
createHighlightAndGridBoxDisplayModel ( ) ;
if ( m_viewer )
{
m_viewer - > update ( ) ;
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : createHighlightAndGridBoxDisplayModel ( )
{
m_viewer - > removeStaticModel ( m_highlightVizModel . p ( ) ) ;
m_highlightVizModel - > removeAllParts ( ) ;
cvf : : Collection < cvf : : Part > parts ;
createPartCollectionFromSelection ( & parts ) ;
if ( parts . size ( ) > 0 )
{
for ( size_t i = 0 ; i < parts . size ( ) ; i + + )
{
m_highlightVizModel - > addPart ( parts [ i ] . p ( ) ) ;
}
m_highlightVizModel - > updateBoundingBoxesRecursive ( ) ;
m_viewer - > addStaticModelOnce ( m_highlightVizModel . p ( ) ) ;
}
2018-01-25 10:37:22 -06:00
m_viewer - > showGridBox ( m_showGridBox ( ) ) ;
}
2018-04-06 04:52:29 -05:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : applyBackgroundColor ( )
{
if ( m_viewer ! = nullptr )
{
m_viewer - > mainCamera ( ) - > viewport ( ) - > setClearColor ( cvf : : Color4f ( backgroundColor ( ) ) ) ;
}
updateGridBoxData ( ) ;
updateAnnotationItems ( ) ;
2018-04-09 04:51:30 -05:00
updateLegends ( ) ;
2018-04-06 04:52:29 -05:00
}
2018-01-25 10:37:22 -06:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : updateDisplayModelVisibility ( )
{
if ( m_viewer . isNull ( ) ) return ;
const cvf : : uint uintSurfaceBit = surfaceBit ;
const cvf : : uint uintMeshSurfaceBit = meshSurfaceBit ;
const cvf : : uint uintFaultBit = faultBit ;
const cvf : : uint uintMeshFaultBit = meshFaultBit ;
2018-04-04 15:34:41 -05:00
const cvf : : uint uintIntersectionCellFaceBit = intersectionCellFaceBit ;
const cvf : : uint uintIntersectionCellMeshBit = intersectionCellMeshBit ;
const cvf : : uint uintIntersectionFaultMeshBit = intersectionFaultMeshBit ;
2018-01-25 10:37:22 -06:00
// Initialize the mask to show everything except the the bits controlled here
2018-04-04 15:34:41 -05:00
unsigned int mask =
0xffffffff
& ~ uintSurfaceBit
& ~ uintFaultBit
& ~ uintMeshSurfaceBit
& ~ uintMeshFaultBit
& ~ intersectionCellFaceBit
& ~ intersectionCellMeshBit
& ~ intersectionFaultMeshBit ;
2018-01-25 10:37:22 -06:00
// Then turn the appropriate bits on according to the user settings
if ( surfaceMode = = SURFACE )
{
mask | = uintSurfaceBit ;
mask | = uintFaultBit ;
2018-04-04 15:34:41 -05:00
mask | = intersectionCellFaceBit ;
2018-01-25 10:37:22 -06:00
}
else if ( surfaceMode = = FAULTS )
{
mask | = uintFaultBit ;
2018-04-04 15:34:41 -05:00
mask | = intersectionCellFaceBit ;
2018-01-25 10:37:22 -06:00
}
if ( meshMode = = FULL_MESH )
{
mask | = uintMeshSurfaceBit ;
mask | = uintMeshFaultBit ;
2018-04-04 15:34:41 -05:00
mask | = intersectionCellMeshBit ;
mask | = intersectionFaultMeshBit ;
2018-01-25 10:37:22 -06:00
}
else if ( meshMode = = FAULTS_MESH )
{
mask | = uintMeshFaultBit ;
2018-04-04 15:34:41 -05:00
mask | = intersectionFaultMeshBit ;
2018-01-25 10:37:22 -06:00
}
m_viewer - > setEnableMask ( mask ) ;
m_viewer - > update ( ) ;
2018-01-09 03:11:28 -06:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool Rim3dView : : showActiveCellsOnly ( )
{
return false ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : zoomAll ( )
{
if ( m_viewer )
{
m_viewer - > zoomAll ( ) ;
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
cvf : : ref < caf : : DisplayCoordTransform > Rim3dView : : displayCoordTransform ( ) const
{
cvf : : ref < caf : : DisplayCoordTransform > coordTrans = new caf : : DisplayCoordTransform ;
cvf : : Vec3d scale ( 1.0 , 1.0 , scaleZ ) ;
coordTrans - > setScale ( scale ) ;
RimCase * rimCase = ownerCase ( ) ;
if ( rimCase )
{
coordTrans - > setTranslation ( rimCase - > displayModelOffset ( ) ) ;
}
return coordTrans ;
}
2018-05-18 12:23:36 -05:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
cvf : : Mat4d Rim3dView : : cameraPosition ( ) const
{
return m_cameraPosition ( ) ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
cvf : : Vec3d Rim3dView : : cameraPointOfInterest ( ) const
{
return m_cameraPointOfInterest ( ) ;
}
2018-01-09 03:11:28 -06:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QWidget * Rim3dView : : viewWidget ( )
{
if ( m_viewer ) return m_viewer - > layoutWidget ( ) ;
else return nullptr ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : forceShowWindowOn ( )
{
m_showWindow . setValueWithFieldChanged ( true ) ;
}
2018-01-25 10:37:22 -06:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2018-01-29 04:24:53 -06:00
void Rim3dView : : disableGridBoxField ( )
2018-01-25 10:37:22 -06:00
{
m_showGridBox = false ;
2018-01-29 04:24:53 -06:00
m_showGridBox . uiCapability ( ) - > setUiHidden ( true ) ;
m_showGridBox . xmlCapability ( ) - > setIOWritable ( false ) ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : disablePerspectiveProjectionField ( )
{
isPerspectiveView = false ;
isPerspectiveView . uiCapability ( ) - > setUiHidden ( true ) ;
isPerspectiveView . xmlCapability ( ) - > setIOWritable ( false ) ;
2018-01-25 10:37:22 -06:00
}
2018-01-11 05:59:52 -06:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : handleMdiWindowClosed ( )
{
RimViewWindow : : handleMdiWindowClosed ( ) ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dView : : setMdiWindowGeometry ( const RimMdiWindowGeometry & windowGeometry )
{
RimViewWindow : : setMdiWindowGeometry ( windowGeometry ) ;
}
2018-01-12 07:12:31 -06:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------