2013-12-03 20:30:32 +01:00
/////////////////////////////////////////////////////////////////////////////////
//
2014-09-24 07:14:52 +02:00
// Copyright (C) Statoil ASA
// Copyright (C) Ceetron Solutions AS
2013-12-03 20:30:32 +01: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.
//
/////////////////////////////////////////////////////////////////////////////////
2017-10-15 21:20:03 +02:00
# include "RimFaultInViewCollection.h"
2013-12-03 20:30:32 +01:00
# include "RiaApplication.h"
# include "RiaPreferences.h"
2017-02-10 08:36:32 +01:00
# include "RiaColorTables.h"
2016-07-16 16:31:55 +02:00
2017-01-09 19:04:45 +01:00
# include "RigMainGrid.h"
2016-07-16 16:31:55 +02:00
2017-06-13 15:41:52 +02:00
# include "RiaDefines.h"
2015-05-15 09:16:33 +02:00
# include "RimEclipseCase.h"
2016-07-16 16:31:55 +02:00
# include "RimEclipseView.h"
2017-10-13 15:01:52 +02:00
# include "RimFaultInView.h"
2018-05-07 18:06:09 +02:00
# include "RimIntersectionCollection.h"
2014-08-22 09:28:25 +02:00
# include "RimNoCommonAreaNNC.h"
# include "RimNoCommonAreaNncCollection.h"
2016-07-16 16:31:55 +02:00
2014-01-23 07:31:07 +01:00
# include "RiuMainWindow.h"
2016-07-16 16:31:55 +02:00
2014-07-24 10:11:43 +02:00
# include "cafAppEnum.h"
# include "cafPdmFieldCvfColor.h"
# include "cafPdmFieldCvfMat4d.h"
2013-12-03 20:30:32 +01:00
2013-12-18 08:57:22 +01:00
namespace caf
{
template < >
2017-10-15 21:20:03 +02:00
void AppEnum < RimFaultInViewCollection : : FaultFaceCullingMode > : : setUp ( )
2013-12-18 08:57:22 +01:00
{
2017-10-15 21:20:03 +02:00
addItem ( RimFaultInViewCollection : : FAULT_BACK_FACE_CULLING , " FAULT_BACK_FACE_CULLING " , " Cell behind fault " ) ;
addItem ( RimFaultInViewCollection : : FAULT_FRONT_FACE_CULLING , " FAULT_FRONT_FACE_CULLING " , " Cell in front of fault " ) ;
addItem ( RimFaultInViewCollection : : FAULT_NO_FACE_CULLING , " FAULT_NO_FACE_CULLING " , " Show both " ) ;
setDefault ( RimFaultInViewCollection : : FAULT_NO_FACE_CULLING ) ;
2013-12-18 08:57:22 +01:00
}
}
2013-12-03 20:30:32 +01:00
2017-10-15 21:20:03 +02:00
CAF_PDM_SOURCE_INIT ( RimFaultInViewCollection , " Faults " ) ;
2013-12-03 20:30:32 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2017-10-15 21:20:03 +02:00
RimFaultInViewCollection : : RimFaultInViewCollection ( )
2013-12-03 20:30:32 +01:00
{
CAF_PDM_InitObject ( " Faults " , " :/draw_style_faults_24x24.png " , " " , " " ) ;
2015-08-10 08:00:16 +02:00
CAF_PDM_InitField ( & showFaultCollection , " Active " , true , " Active " , " " , " " , " " ) ;
2015-08-05 13:27:36 +02:00
showFaultCollection . uiCapability ( ) - > setUiHidden ( true ) ;
2013-12-03 20:30:32 +01:00
2017-11-30 13:44:18 +01: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 09:08:45 +01:00
2017-10-15 21:20:03 +02:00
CAF_PDM_InitField ( & faultResult , " FaultFaceCulling " , caf : : AppEnum < RimFaultInViewCollection : : FaultFaceCullingMode > ( RimFaultInViewCollection : : FAULT_BACK_FACE_CULLING ) , " Dynamic Face Selection " , " " , " " , " " ) ;
2013-12-18 08:57:22 +01:00
2017-11-30 13:44:18 +01:00
CAF_PDM_InitField ( & showFaultLabel , " ShowFaultLabel " , false , " Show Labels " , " " , " " , " " ) ;
2013-12-03 20:30:32 +01:00
cvf : : Color3f defWellLabelColor = RiaApplication : : instance ( ) - > preferences ( ) - > defaultWellLabelColor ( ) ;
2017-11-30 13:44:18 +01:00
CAF_PDM_InitField ( & faultLabelColor , " FaultLabelColor " , defWellLabelColor , " Label Color " , " " , " " , " " ) ;
2015-08-10 08:00:16 +02:00
2014-09-09 13:07:01 +02:00
CAF_PDM_InitField ( & showNNCs , " ShowNNCs " , true , " Show NNCs " , " " , " " , " " ) ;
2017-11-30 13:44:18 +01:00
CAF_PDM_InitField ( & hideNncsWhenNoResultIsAvailable , " HideNncsWhenNoResultIsAvailable " , true , " Hide NNC Geometry if No NNC Result is Available " , " " , " " , " " ) ;
2013-12-03 20:30:32 +01:00
2014-08-22 09:28:25 +02:00
CAF_PDM_InitFieldNoDefault ( & noCommonAreaNnncCollection , " NoCommonAreaNnncCollection " , " NNCs With No Common Area " , " " , " " , " " ) ;
noCommonAreaNnncCollection = new RimNoCommonAreaNncCollection ;
2015-08-10 08:00:16 +02:00
noCommonAreaNnncCollection . uiCapability ( ) - > setUiHidden ( true ) ;
2013-12-03 20:30:32 +01:00
2014-09-04 09:55:55 +02:00
CAF_PDM_InitFieldNoDefault ( & faults , " Faults " , " Faults " , " " , " " , " " ) ;
2015-08-10 08:00:16 +02:00
faults . uiCapability ( ) - > setUiHidden ( true ) ;
2013-12-03 20:30:32 +01:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2017-10-15 21:20:03 +02:00
RimFaultInViewCollection : : ~ RimFaultInViewCollection ( )
2013-12-03 20:30:32 +01:00
{
faults . deleteAllChildObjects ( ) ;
2014-08-22 09:28:25 +02:00
delete noCommonAreaNnncCollection ( ) ;
2013-12-03 20:30:32 +01:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2017-10-15 21:20:03 +02:00
void RimFaultInViewCollection : : fieldChangedByUi ( const caf : : PdmFieldHandle * changedField , const QVariant & oldValue , const QVariant & newValue )
2013-12-03 20:30:32 +01:00
{
2014-08-01 13:35:52 +02:00
this - > updateUiIconFromToggleField ( ) ;
2013-12-10 07:43:17 +01:00
if ( & faultLabelColor = = changedField )
{
2018-09-14 09:30:05 +02:00
parentView ( ) - > scheduleReservoirGridGeometryRegen ( ) ;
parentView ( ) - > crossSectionCollection ( ) - > scheduleCreateDisplayModelAndRedraw2dIntersectionViews ( ) ;
2013-12-10 07:43:17 +01:00
}
2014-07-31 14:05:40 +02:00
if ( & showFaultFaces = = changedField | |
2013-12-06 19:39:55 +01:00
& showOppositeFaultFaces = = changedField | |
& showFaultCollection = = changedField | |
& showFaultLabel = = changedField | |
2014-08-01 14:48:37 +02:00
& m_showFaultsOutsideFilters = = changedField | |
2013-12-18 08:57:22 +01:00
& faultLabelColor = = changedField | |
2014-08-26 11:55:26 +02:00
& faultResult = = changedField | |
2014-09-09 13:07:01 +02:00
& showNNCs = = changedField | |
& hideNncsWhenNoResultIsAvailable = = changedField
2013-12-18 08:57:22 +01:00
)
2013-12-03 20:30:32 +01:00
{
2018-09-14 09:30:05 +02:00
parentView ( ) - > scheduleCreateDisplayModelAndRedraw ( ) ;
parentView ( ) - > crossSectionCollection ( ) - > scheduleCreateDisplayModelAndRedraw2dIntersectionViews ( ) ;
2013-12-03 20:30:32 +01:00
}
2014-01-23 07:31:07 +01:00
if ( & showFaultLabel = = changedField )
{
RiuMainWindow : : instance ( ) - > refreshDrawStyleActions ( ) ;
}
2013-12-03 20:30:32 +01:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2017-10-15 21:20:03 +02:00
caf : : PdmFieldHandle * RimFaultInViewCollection : : objectToggleField ( )
2013-12-03 20:30:32 +01:00
{
return & showFaultCollection ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2017-10-15 21:20:03 +02:00
RimFaultInView * RimFaultInViewCollection : : findFaultByName ( QString name )
2013-12-03 20:30:32 +01:00
{
for ( size_t i = 0 ; i < this - > faults ( ) . size ( ) ; + + i )
{
if ( this - > faults ( ) [ i ] - > name ( ) = = name )
{
return this - > faults ( ) [ i ] ;
}
}
2018-02-18 18:56:43 +01:00
return nullptr ;
2013-12-03 20:30:32 +01:00
}
2013-12-05 09:59:05 +01:00
2013-12-05 10:48:57 +01: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 14:05:20 +01:00
2013-12-05 10:48:57 +01:00
return ( compareValue < 0 ) ;
}
2013-12-05 09:59:05 +01:00
2013-12-04 12:13:01 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2017-10-15 21:20:03 +02:00
void RimFaultInViewCollection : : syncronizeFaults ( )
2013-12-04 12:13:01 +01:00
{
2018-09-14 09:30:05 +02:00
if ( ! ( parentView ( ) & & parentView ( ) - > mainGrid ( ) ) ) return ;
2013-12-04 12:13:01 +01:00
2017-02-10 08:36:32 +01:00
const caf : : ColorTable & colorTable = RiaColorTables : : faultsPaletteColors ( ) ;
2013-12-04 12:13:01 +01:00
2018-09-14 09:30:05 +02:00
const cvf : : Collection < RigFault > constRigFaults = parentView ( ) - > mainGrid ( ) - > faults ( ) ;
2013-12-05 09:59:05 +01:00
2014-01-22 14:05:20 +01:00
cvf : : Collection < RigFault > rigFaults ;
{
cvf : : Collection < RigFault > sortedFaults ( constRigFaults ) ;
2013-12-05 09:59:05 +01:00
2014-01-22 14:05:20 +01:00
std : : sort ( sortedFaults . begin ( ) , sortedFaults . end ( ) , faultComparator ) ;
cvf : : ref < RigFault > undefinedFaults ;
2016-08-22 13:24:46 +02:00
cvf : : ref < RigFault > undefinedFaultsWInactive ;
2014-01-22 14:05:20 +01:00
for ( size_t i = 0 ; i < sortedFaults . size ( ) ; i + + )
{
2016-08-22 13:24:46 +02:00
QString faultName = sortedFaults [ i ] - > name ( ) ;
2017-06-13 15:41:52 +02:00
if ( faultName . compare ( RiaDefines : : undefinedGridFaultName ( ) , Qt : : CaseInsensitive ) = = 0 )
2014-01-22 14:05:20 +01:00
{
undefinedFaults = sortedFaults [ i ] ;
}
2016-08-22 13:24:46 +02:00
2017-06-13 15:41:52 +02:00
if ( faultName . startsWith ( RiaDefines : : undefinedGridFaultName ( ) , Qt : : CaseInsensitive )
2016-08-22 13:24:46 +02:00
& & faultName . contains ( " Inactive " ) )
{
undefinedFaultsWInactive = sortedFaults [ i ] ;
}
2014-01-22 14:05:20 +01:00
}
if ( undefinedFaults . notNull ( ) )
{
sortedFaults . erase ( undefinedFaults . p ( ) ) ;
rigFaults . push_back ( undefinedFaults . p ( ) ) ;
}
2016-08-22 13:24:46 +02:00
if ( undefinedFaultsWInactive . notNull ( ) )
{
sortedFaults . erase ( undefinedFaultsWInactive . p ( ) ) ;
rigFaults . push_back ( undefinedFaultsWInactive . p ( ) ) ;
}
2014-01-22 14:05:20 +01:00
for ( size_t i = 0 ; i < sortedFaults . size ( ) ; i + + )
{
rigFaults . push_back ( sortedFaults [ i ] . p ( ) ) ;
}
}
// Find faults with
2013-12-04 12:13:01 +01:00
2017-10-13 15:01:52 +02:00
std : : vector < caf : : PdmPointer < RimFaultInView > > newFaults ;
2013-12-04 12:13:01 +01:00
// Find corresponding fault from data model, or create a new
for ( size_t fIdx = 0 ; fIdx < rigFaults . size ( ) ; + + fIdx )
{
2017-10-13 15:01:52 +02:00
RimFaultInView * rimFault = this - > findFaultByName ( rigFaults [ fIdx ] - > name ( ) ) ;
2013-12-04 12:13:01 +01:00
if ( ! rimFault )
{
2017-10-13 15:01:52 +02:00
rimFault = new RimFaultInView ( ) ;
2017-02-10 08:36:32 +01:00
rimFault - > faultColor = colorTable . cycledColor3f ( fIdx ) ;
2016-09-16 12:04:20 +02:00
QString faultName = rigFaults [ fIdx ] - > name ( ) ;
2017-06-13 15:41:52 +02:00
if ( faultName . startsWith ( RiaDefines : : undefinedGridFaultName ( ) , Qt : : CaseInsensitive )
2016-09-16 12:04:20 +02:00
& & faultName . contains ( " Inactive " ) )
{
rimFault - > showFault = false ; // Turn fault against inactive cells off by default
}
2013-12-04 12:13:01 +01:00
}
rimFault - > setFaultGeometry ( rigFaults [ fIdx ] . p ( ) ) ;
newFaults . push_back ( rimFault ) ;
}
this - > faults ( ) . clear ( ) ;
this - > faults ( ) . insert ( 0 , newFaults ) ;
2014-01-03 09:40:39 +01:00
QString toolTip = QString ( " Fault count (%1) " ) . arg ( newFaults . size ( ) ) ;
setUiToolTip ( toolTip ) ;
2014-08-22 09:28:25 +02:00
// NNCs
this - > noCommonAreaNnncCollection ( ) - > noCommonAreaNncs ( ) . deleteAllChildObjects ( ) ;
2018-09-14 09:30:05 +02:00
RigMainGrid * mainGrid = parentView ( ) - > mainGrid ( ) ;
2014-08-22 09:28:25 +02:00
std : : vector < RigConnection > & nncConnections = mainGrid - > nncData ( ) - > connections ( ) ;
2018-09-27 20:40:05 +02:00
for ( size_t connIndex = 0 ; connIndex < nncConnections . size ( ) ; connIndex + + )
2014-08-22 09:28:25 +02:00
{
2018-09-27 20:40:05 +02:00
if ( ! nncConnections [ connIndex ] . hasCommonArea ( ) )
2014-08-22 09:28:25 +02:00
{
RimNoCommonAreaNNC * noCommonAreaNnc = new RimNoCommonAreaNNC ( ) ;
2014-09-04 10:37:36 +02:00
QString firstConnectionText ;
QString secondConnectionText ;
{
2018-05-08 14:37:23 +02:00
size_t gridLocalCellIndex ;
2018-09-27 20:40:05 +02:00
const RigGridBase * hostGrid = mainGrid - > gridAndGridLocalIdxFromGlobalCellIdx ( nncConnections [ connIndex ] . m_c1GlobIdx , & gridLocalCellIndex ) ;
2014-09-04 10:37:36 +02:00
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 09:28:25 +02:00
2014-09-04 10:37:36 +02:00
{
2018-05-08 14:37:23 +02:00
size_t gridLocalCellIndex ;
2018-09-27 20:40:05 +02:00
const RigGridBase * hostGrid = mainGrid - > gridAndGridLocalIdxFromGlobalCellIdx ( nncConnections [ connIndex ] . m_c2GlobIdx , & gridLocalCellIndex ) ;
2014-09-04 10:37:36 +02:00
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 09:28:25 +02:00
2014-09-04 10:37:36 +02:00
noCommonAreaNnc - > name = firstConnectionText + secondConnectionText ;
2014-08-22 09:28:25 +02:00
this - > noCommonAreaNnncCollection ( ) - > noCommonAreaNncs ( ) . push_back ( noCommonAreaNnc ) ;
}
2014-09-04 09:55:55 +02:00
this - > noCommonAreaNnncCollection ( ) - > updateName ( ) ;
2014-08-22 09:28:25 +02:00
}
2013-12-04 12:13:01 +01:00
}
2013-12-18 09:26:06 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2017-10-15 21:20:03 +02:00
bool RimFaultInViewCollection : : isGridVisualizationMode ( ) const
2013-12-18 09:26:06 +01:00
{
2018-09-14 09:30:05 +02:00
return parentView ( ) - > isGridVisualizationMode ( ) ;
2013-12-18 09:26:06 +01:00
}
2014-01-03 08:38:09 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2017-10-15 21:20:03 +02:00
void RimFaultInViewCollection : : defineUiOrdering ( QString uiConfigName , caf : : PdmUiOrdering & uiOrdering )
2014-01-03 08:38:09 +01:00
{
bool isGridVizMode = isGridVisualizationMode ( ) ;
2015-08-05 13:27:36 +02:00
faultResult . uiCapability ( ) - > setUiReadOnly ( isGridVizMode ) ;
showFaultFaces . uiCapability ( ) - > setUiReadOnly ( isGridVizMode ) ;
showOppositeFaultFaces . uiCapability ( ) - > setUiReadOnly ( isGridVizMode ) ;
2014-01-03 13:42:33 +01:00
caf : : PdmUiGroup * labs = uiOrdering . addNewGroup ( " Fault Labels " ) ;
labs - > add ( & showFaultLabel ) ;
labs - > add ( & faultLabelColor ) ;
2014-01-22 14:05:20 +01:00
caf : : PdmUiGroup * adv = uiOrdering . addNewGroup ( " Fault Options " ) ;
2014-08-01 14:48:37 +02:00
adv - > add ( & m_showFaultsOutsideFilters ) ;
2014-01-03 13:42:33 +01:00
2014-01-22 14:05:20 +01:00
caf : : PdmUiGroup * ffviz = uiOrdering . addNewGroup ( " Fault Face Visibility " ) ;
ffviz - > add ( & showFaultFaces ) ;
ffviz - > add ( & showOppositeFaultFaces ) ;
ffviz - > add ( & faultResult ) ;
2014-09-09 13:07:01 +02:00
caf : : PdmUiGroup * nncViz = uiOrdering . addNewGroup ( " NNC Visibility " ) ;
nncViz - > add ( & showNNCs ) ;
nncViz - > add ( & hideNncsWhenNoResultIsAvailable ) ;
2014-01-03 08:38:09 +01:00
}
2018-09-14 09:30:05 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimEclipseView * RimFaultInViewCollection : : parentView ( ) const
{
RimEclipseView * view = nullptr ;
this - > firstAncestorOrThisOfTypeAsserted ( view ) ;
return view ;
}
2014-08-01 14:48:37 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2018-04-04 22:34:41 +02:00
bool RimFaultInViewCollection : : isShowingFaultsAndFaultsOutsideFilters ( ) const
2014-08-01 14:48:37 +02:00
{
if ( ! showFaultCollection ) return false ;
return m_showFaultsOutsideFilters ;
}
2018-11-19 08:28:45 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimFaultInViewCollection : : setShowFaultsOutsideFilter ( bool show )
{
m_showFaultsOutsideFilters = show ;
}