2013-12-03 13:30:32 -06:00
/////////////////////////////////////////////////////////////////////////////////
//
2014-09-24 00:14:52 -05:00
// Copyright (C) Statoil ASA
// Copyright (C) Ceetron Solutions AS
2013-12-03 13:30:32 -06:00
//
// 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 "RimFaultCollection.h"
# include "RiaApplication.h"
# include "RiaPreferences.h"
2017-02-10 01:36:32 -06:00
# include "RiaColorTables.h"
2016-07-16 09:31:55 -05:00
2017-01-09 12:04:45 -06:00
# include "RigMainGrid.h"
2016-07-16 09:31:55 -05:00
2017-06-13 08:41:52 -05:00
# include "RiaDefines.h"
2015-05-15 02:16:33 -05:00
# include "RimEclipseCase.h"
2016-07-16 09:31:55 -05:00
# include "RimEclipseView.h"
# include "RimFault.h"
2014-08-22 02:28:25 -05:00
# include "RimNoCommonAreaNNC.h"
# include "RimNoCommonAreaNncCollection.h"
2016-07-16 09:31:55 -05:00
2014-01-23 00:31:07 -06:00
# include "RiuMainWindow.h"
2016-07-16 09:31:55 -05:00
2014-07-24 03:11:43 -05:00
# include "cafAppEnum.h"
# include "cafPdmFieldCvfColor.h"
# include "cafPdmFieldCvfMat4d.h"
2013-12-03 13:30:32 -06:00
2013-12-18 01:57:22 -06:00
namespace caf
{
template < >
void AppEnum < RimFaultCollection : : FaultFaceCullingMode > : : setUp ( )
{
2014-01-03 01:58:26 -06:00
addItem ( RimFaultCollection : : FAULT_BACK_FACE_CULLING , " FAULT_BACK_FACE_CULLING " , " Cell behind fault " ) ;
addItem ( RimFaultCollection : : FAULT_FRONT_FACE_CULLING , " FAULT_FRONT_FACE_CULLING " , " Cell in front of fault " ) ;
2014-01-03 06:42:33 -06:00
addItem ( RimFaultCollection : : FAULT_NO_FACE_CULLING , " FAULT_NO_FACE_CULLING " , " Show both " ) ;
2013-12-18 01:57:22 -06:00
setDefault ( RimFaultCollection : : FAULT_NO_FACE_CULLING ) ;
}
}
2013-12-03 13:30:32 -06:00
CAF_PDM_SOURCE_INIT ( RimFaultCollection , " Faults " ) ;
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimFaultCollection : : RimFaultCollection ( )
{
CAF_PDM_InitObject ( " Faults " , " :/draw_style_faults_24x24.png " , " " , " " ) ;
2015-08-10 01:00:16 -05:00
CAF_PDM_InitField ( & showFaultCollection , " Active " , true , " Active " , " " , " " , " " ) ;
2015-08-05 06:27:36 -05:00
showFaultCollection . uiCapability ( ) - > setUiHidden ( true ) ;
2013-12-03 13:30:32 -06:00
2015-08-10 01:00:16 -05:00
CAF_PDM_InitField ( & showFaultFaces , " ShowFaultFaces " , true , " Show defined faces " , " " , " " , " " ) ;
CAF_PDM_InitField ( & showOppositeFaultFaces , " ShowOppositeFaultFaces " , true , " Show opposite faces " , " " , " " , " " ) ;
CAF_PDM_InitField ( & m_showFaultsOutsideFilters , " ShowFaultsOutsideFilters " , true , " Show faults outside filters " , " " , " " , " " ) ;
2013-12-06 02:08:45 -06:00
2015-08-10 01:00:16 -05:00
CAF_PDM_InitField ( & faultResult , " FaultFaceCulling " , caf : : AppEnum < RimFaultCollection : : FaultFaceCullingMode > ( RimFaultCollection : : FAULT_BACK_FACE_CULLING ) , " Dynamic Face Selection " , " " , " " , " " ) ;
2013-12-18 01:57:22 -06:00
2015-08-10 01:00:16 -05:00
CAF_PDM_InitField ( & showFaultLabel , " ShowFaultLabel " , false , " Show labels " , " " , " " , " " ) ;
2013-12-03 13:30:32 -06:00
cvf : : Color3f defWellLabelColor = RiaApplication : : instance ( ) - > preferences ( ) - > defaultWellLabelColor ( ) ;
2015-08-10 01:00:16 -05:00
CAF_PDM_InitField ( & faultLabelColor , " FaultLabelColor " , defWellLabelColor , " Label color " , " " , " " , " " ) ;
2014-09-09 06:07:01 -05:00
CAF_PDM_InitField ( & showNNCs , " ShowNNCs " , true , " Show NNCs " , " " , " " , " " ) ;
CAF_PDM_InitField ( & hideNncsWhenNoResultIsAvailable , " HideNncsWhenNoResultIsAvailable " , true , " Hide NNC geometry if no NNC result is available " , " " , " " , " " ) ;
2013-12-03 13:30:32 -06:00
2014-08-22 02:28:25 -05:00
CAF_PDM_InitFieldNoDefault ( & noCommonAreaNnncCollection , " NoCommonAreaNnncCollection " , " NNCs With No Common Area " , " " , " " , " " ) ;
noCommonAreaNnncCollection = new RimNoCommonAreaNncCollection ;
2015-08-10 01:00:16 -05:00
noCommonAreaNnncCollection . uiCapability ( ) - > setUiHidden ( true ) ;
2013-12-03 13:30:32 -06:00
2014-09-04 02:55:55 -05:00
CAF_PDM_InitFieldNoDefault ( & faults , " Faults " , " Faults " , " " , " " , " " ) ;
2015-08-10 01:00:16 -05:00
faults . uiCapability ( ) - > setUiHidden ( true ) ;
2014-09-04 02:55:55 -05:00
2013-12-03 13:30:32 -06:00
m_reservoirView = NULL ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimFaultCollection : : ~ RimFaultCollection ( )
{
faults . deleteAllChildObjects ( ) ;
2014-08-22 02:28:25 -05:00
delete noCommonAreaNnncCollection ( ) ;
2013-12-03 13:30:32 -06:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimFaultCollection : : fieldChangedByUi ( const caf : : PdmFieldHandle * changedField , const QVariant & oldValue , const QVariant & newValue )
{
2014-08-01 06:35:52 -05:00
this - > updateUiIconFromToggleField ( ) ;
2013-12-10 00:43:17 -06:00
if ( & faultLabelColor = = changedField )
{
m_reservoirView - > scheduleReservoirGridGeometryRegen ( ) ;
}
2014-07-31 07:05:40 -05:00
if ( & showFaultFaces = = changedField | |
2013-12-06 12:39:55 -06:00
& showOppositeFaultFaces = = changedField | |
& showFaultCollection = = changedField | |
& showFaultLabel = = changedField | |
2014-08-01 07:48:37 -05:00
& m_showFaultsOutsideFilters = = changedField | |
2013-12-18 01:57:22 -06:00
& faultLabelColor = = changedField | |
2014-08-26 04:55:26 -05:00
& faultResult = = changedField | |
2014-09-09 06:07:01 -05:00
& showNNCs = = changedField | |
& hideNncsWhenNoResultIsAvailable = = changedField
2013-12-18 01:57:22 -06:00
)
2013-12-03 13:30:32 -06:00
{
if ( m_reservoirView )
{
m_reservoirView - > scheduleCreateDisplayModelAndRedraw ( ) ;
}
}
2014-01-23 00:31:07 -06:00
if ( & showFaultLabel = = changedField )
{
RiuMainWindow : : instance ( ) - > refreshDrawStyleActions ( ) ;
}
2013-12-03 13:30:32 -06:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2015-05-21 03:05:33 -05:00
void RimFaultCollection : : setReservoirView ( RimEclipseView * ownerReservoirView )
2013-12-03 13:30:32 -06:00
{
m_reservoirView = ownerReservoirView ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
caf : : PdmFieldHandle * RimFaultCollection : : objectToggleField ( )
{
return & showFaultCollection ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimFault * RimFaultCollection : : findFaultByName ( QString name )
{
for ( size_t i = 0 ; i < this - > faults ( ) . size ( ) ; + + i )
{
if ( this - > faults ( ) [ i ] - > name ( ) = = name )
{
return this - > faults ( ) [ i ] ;
}
}
return NULL ;
}
2013-12-05 02:59:05 -06:00
2013-12-05 03:48:57 -06:00
//--------------------------------------------------------------------------------------------------
/// A comparing function used to sort Faults in the RimFaultCollection::syncronizeFaults() method
//--------------------------------------------------------------------------------------------------
bool faultComparator ( const cvf : : ref < RigFault > & a , const cvf : : ref < RigFault > & b )
{
CVF_TIGHT_ASSERT ( a . notNull ( ) & & b . notNull ( ) ) ;
int compareValue = a - > name ( ) . compare ( b - > name ( ) , Qt : : CaseInsensitive ) ;
2014-01-22 07:05:20 -06:00
2013-12-05 03:48:57 -06:00
return ( compareValue < 0 ) ;
}
2013-12-05 02:59:05 -06:00
2013-12-04 05:13:01 -06:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimFaultCollection : : syncronizeFaults ( )
{
2017-01-09 08:15:08 -06:00
if ( ! ( m_reservoirView & & m_reservoirView - > mainGrid ( ) ) ) return ;
2013-12-04 05:13:01 -06:00
2017-02-10 01:36:32 -06:00
const caf : : ColorTable & colorTable = RiaColorTables : : faultsPaletteColors ( ) ;
2013-12-04 05:13:01 -06:00
2017-01-09 08:15:08 -06:00
const cvf : : Collection < RigFault > constRigFaults = m_reservoirView - > mainGrid ( ) - > faults ( ) ;
2013-12-05 02:59:05 -06:00
2014-01-22 07:05:20 -06:00
cvf : : Collection < RigFault > rigFaults ;
{
cvf : : Collection < RigFault > sortedFaults ( constRigFaults ) ;
2013-12-05 02:59:05 -06:00
2014-01-22 07:05:20 -06:00
std : : sort ( sortedFaults . begin ( ) , sortedFaults . end ( ) , faultComparator ) ;
cvf : : ref < RigFault > undefinedFaults ;
2016-08-22 06:24:46 -05:00
cvf : : ref < RigFault > undefinedFaultsWInactive ;
2014-01-22 07:05:20 -06:00
for ( size_t i = 0 ; i < sortedFaults . size ( ) ; i + + )
{
2016-08-22 06:24:46 -05:00
QString faultName = sortedFaults [ i ] - > name ( ) ;
2017-06-13 08:41:52 -05:00
if ( faultName . compare ( RiaDefines : : undefinedGridFaultName ( ) , Qt : : CaseInsensitive ) = = 0 )
2014-01-22 07:05:20 -06:00
{
undefinedFaults = sortedFaults [ i ] ;
}
2016-08-22 06:24:46 -05:00
2017-06-13 08:41:52 -05:00
if ( faultName . startsWith ( RiaDefines : : undefinedGridFaultName ( ) , Qt : : CaseInsensitive )
2016-08-22 06:24:46 -05:00
& & faultName . contains ( " Inactive " ) )
{
undefinedFaultsWInactive = sortedFaults [ i ] ;
}
2014-01-22 07:05:20 -06:00
}
if ( undefinedFaults . notNull ( ) )
{
sortedFaults . erase ( undefinedFaults . p ( ) ) ;
rigFaults . push_back ( undefinedFaults . p ( ) ) ;
}
2016-08-22 06:24:46 -05:00
if ( undefinedFaultsWInactive . notNull ( ) )
{
sortedFaults . erase ( undefinedFaultsWInactive . p ( ) ) ;
rigFaults . push_back ( undefinedFaultsWInactive . p ( ) ) ;
}
2014-01-22 07:05:20 -06:00
for ( size_t i = 0 ; i < sortedFaults . size ( ) ; i + + )
{
rigFaults . push_back ( sortedFaults [ i ] . p ( ) ) ;
}
}
// Find faults with
2013-12-04 05:13:01 -06:00
std : : vector < caf : : PdmPointer < RimFault > > newFaults ;
// Find corresponding fault from data model, or create a new
for ( size_t fIdx = 0 ; fIdx < rigFaults . size ( ) ; + + fIdx )
{
RimFault * rimFault = this - > findFaultByName ( rigFaults [ fIdx ] - > name ( ) ) ;
if ( ! rimFault )
{
rimFault = new RimFault ( ) ;
2017-02-10 01:36:32 -06:00
rimFault - > faultColor = colorTable . cycledColor3f ( fIdx ) ;
2016-09-16 05:04:20 -05:00
QString faultName = rigFaults [ fIdx ] - > name ( ) ;
2017-06-13 08:41:52 -05:00
if ( faultName . startsWith ( RiaDefines : : undefinedGridFaultName ( ) , Qt : : CaseInsensitive )
2016-09-16 05:04:20 -05:00
& & faultName . contains ( " Inactive " ) )
{
rimFault - > showFault = false ; // Turn fault against inactive cells off by default
}
2013-12-04 05:13:01 -06:00
}
rimFault - > setFaultGeometry ( rigFaults [ fIdx ] . p ( ) ) ;
newFaults . push_back ( rimFault ) ;
}
this - > faults ( ) . clear ( ) ;
this - > faults ( ) . insert ( 0 , newFaults ) ;
2014-01-03 02:40:39 -06:00
QString toolTip = QString ( " Fault count (%1) " ) . arg ( newFaults . size ( ) ) ;
setUiToolTip ( toolTip ) ;
2014-08-22 02:28:25 -05:00
// NNCs
this - > noCommonAreaNnncCollection ( ) - > noCommonAreaNncs ( ) . deleteAllChildObjects ( ) ;
2017-01-09 08:15:08 -06:00
RigMainGrid * mainGrid = m_reservoirView - > mainGrid ( ) ;
2014-08-22 02:28:25 -05:00
std : : vector < RigConnection > & nncConnections = mainGrid - > nncData ( ) - > connections ( ) ;
for ( size_t i = 0 ; i < nncConnections . size ( ) ; i + + )
{
if ( ! nncConnections [ i ] . hasCommonArea ( ) )
{
RimNoCommonAreaNNC * noCommonAreaNnc = new RimNoCommonAreaNNC ( ) ;
2014-09-04 03:37:36 -05:00
QString firstConnectionText ;
QString secondConnectionText ;
{
2015-11-24 07:21:02 -06:00
const RigCell & cell = mainGrid - > globalCellArray ( ) [ nncConnections [ i ] . m_c1GlobIdx ] ;
2014-09-04 03:37:36 -05:00
RigGridBase * hostGrid = cell . hostGrid ( ) ;
size_t gridLocalCellIndex = cell . gridLocalCellIndex ( ) ;
size_t i , j , k ;
if ( hostGrid - > ijkFromCellIndex ( gridLocalCellIndex , & i , & j , & k ) )
{
// Adjust to 1-based Eclipse indexing
i + + ;
j + + ;
k + + ;
if ( ! hostGrid - > isMainGrid ( ) )
{
QString gridName = QString : : fromStdString ( hostGrid - > gridName ( ) ) ;
firstConnectionText = gridName + " " ;
}
firstConnectionText + = QString ( " [%1 %2 %3] - " ) . arg ( i ) . arg ( j ) . arg ( k ) ;
}
}
2014-08-22 02:28:25 -05:00
2014-09-04 03:37:36 -05:00
{
2015-11-24 07:21:02 -06:00
const RigCell & cell = mainGrid - > globalCellArray ( ) [ nncConnections [ i ] . m_c2GlobIdx ] ;
2014-09-04 03:37:36 -05:00
RigGridBase * hostGrid = cell . hostGrid ( ) ;
size_t gridLocalCellIndex = cell . gridLocalCellIndex ( ) ;
size_t i , j , k ;
if ( hostGrid - > ijkFromCellIndex ( gridLocalCellIndex , & i , & j , & k ) )
{
// Adjust to 1-based Eclipse indexing
i + + ;
j + + ;
k + + ;
if ( ! hostGrid - > isMainGrid ( ) )
{
QString gridName = QString : : fromStdString ( hostGrid - > gridName ( ) ) ;
secondConnectionText = gridName + " " ;
}
secondConnectionText + = QString ( " [%1 %2 %3] " ) . arg ( i ) . arg ( j ) . arg ( k ) ;
}
}
2014-08-22 02:28:25 -05:00
2014-09-04 03:37:36 -05:00
noCommonAreaNnc - > name = firstConnectionText + secondConnectionText ;
2014-08-22 02:28:25 -05:00
this - > noCommonAreaNnncCollection ( ) - > noCommonAreaNncs ( ) . push_back ( noCommonAreaNnc ) ;
}
2014-09-04 02:55:55 -05:00
this - > noCommonAreaNnncCollection ( ) - > updateName ( ) ;
2014-08-22 02:28:25 -05:00
}
2013-12-04 05:13:01 -06:00
}
2013-12-18 02:26:06 -06:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimFaultCollection : : isGridVisualizationMode ( ) const
{
CVF_ASSERT ( m_reservoirView ) ;
2013-12-18 16:37:30 -06:00
return m_reservoirView - > isGridVisualizationMode ( ) ;
2013-12-18 02:26:06 -06:00
}
2014-01-03 01:38:09 -06:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimFaultCollection : : defineUiOrdering ( QString uiConfigName , caf : : PdmUiOrdering & uiOrdering )
{
bool isGridVizMode = isGridVisualizationMode ( ) ;
2015-08-05 06:27:36 -05:00
faultResult . uiCapability ( ) - > setUiReadOnly ( isGridVizMode ) ;
showFaultFaces . uiCapability ( ) - > setUiReadOnly ( isGridVizMode ) ;
showOppositeFaultFaces . uiCapability ( ) - > setUiReadOnly ( isGridVizMode ) ;
2014-01-03 06:42:33 -06:00
caf : : PdmUiGroup * labs = uiOrdering . addNewGroup ( " Fault Labels " ) ;
labs - > add ( & showFaultLabel ) ;
labs - > add ( & faultLabelColor ) ;
2014-01-22 07:05:20 -06:00
caf : : PdmUiGroup * adv = uiOrdering . addNewGroup ( " Fault Options " ) ;
2014-08-01 07:48:37 -05:00
adv - > add ( & m_showFaultsOutsideFilters ) ;
2014-01-03 06:42:33 -06:00
2014-01-22 07:05:20 -06:00
caf : : PdmUiGroup * ffviz = uiOrdering . addNewGroup ( " Fault Face Visibility " ) ;
ffviz - > add ( & showFaultFaces ) ;
ffviz - > add ( & showOppositeFaultFaces ) ;
ffviz - > add ( & faultResult ) ;
2014-09-09 06:07:01 -05:00
caf : : PdmUiGroup * nncViz = uiOrdering . addNewGroup ( " NNC Visibility " ) ;
nncViz - > add ( & showNNCs ) ;
nncViz - > add ( & hideNncsWhenNoResultIsAvailable ) ;
2014-01-03 01:38:09 -06:00
}
2014-08-01 07:48:37 -05:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimFaultCollection : : showFaultsOutsideFilters ( ) const
{
if ( ! showFaultCollection ) return false ;
return m_showFaultsOutsideFilters ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimFaultCollection : : setShowFaultsOutsideFilters ( bool enableState )
{
m_showFaultsOutsideFilters = enableState ;
}
2014-08-22 02:28:25 -05:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimFaultCollection : : addMockData ( )
{
2017-01-09 08:15:08 -06:00
if ( ! ( m_reservoirView & & m_reservoirView - > mainGrid ( ) ) ) return ;
2014-08-22 02:28:25 -05:00
}