Merge pull request #8376 from OPM/fault_visibilityupdates

Faults: Add Visibiliy mode for overlapping area
This commit is contained in:
Magne Sjaastad 2022-03-25 18:15:22 +01:00
parent 8ad2ffa471
commit 985a2c8f30
11 changed files with 245 additions and 30 deletions

View File

@ -17,6 +17,7 @@ set(SOURCE_GROUP_HEADER_FILES
${CMAKE_CURRENT_LIST_DIR}/RicImportEclipseCaseTimeStepFilterFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicImportEclipseCaseTimeStepFilterFeature.h
${CMAKE_CURRENT_LIST_DIR}/RicEclipsePropertyFilterNewInViewFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicEclipsePropertyFilterNewInViewFeature.h
${CMAKE_CURRENT_LIST_DIR}/RicEclipseHideFaultFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicEclipseHideFaultFeature.h
${CMAKE_CURRENT_LIST_DIR}/RicEclipseShowOnlyFaultFeature.h
) )
set(SOURCE_GROUP_SOURCE_FILES set(SOURCE_GROUP_SOURCE_FILES
@ -38,6 +39,7 @@ set(SOURCE_GROUP_SOURCE_FILES
${CMAKE_CURRENT_LIST_DIR}/RicImportEclipseCaseTimeStepFilterFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicImportEclipseCaseTimeStepFilterFeature.cpp
${CMAKE_CURRENT_LIST_DIR}/RicEclipsePropertyFilterNewInViewFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicEclipsePropertyFilterNewInViewFeature.cpp
${CMAKE_CURRENT_LIST_DIR}/RicEclipseHideFaultFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicEclipseHideFaultFeature.cpp
${CMAKE_CURRENT_LIST_DIR}/RicEclipseShowOnlyFaultFeature.cpp
) )
list(APPEND COMMAND_CODE_HEADER_FILES ${SOURCE_GROUP_HEADER_FILES}) list(APPEND COMMAND_CODE_HEADER_FILES ${SOURCE_GROUP_HEADER_FILES})

View File

@ -0,0 +1,105 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2021 Equinor ASA
//
// 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 "RicEclipseShowOnlyFaultFeature.h"
#include "RicEclipsePropertyFilterFeatureImpl.h"
#include "RicEclipsePropertyFilterNewExec.h"
#include "RiaApplication.h"
#include "Rim3dView.h"
#include "RimEclipseCellColors.h"
#include "RimEclipsePropertyFilterCollection.h"
#include "RimEclipseView.h"
#include "RimFaultInView.h"
#include "RimFaultInViewCollection.h"
#include "RigFault.h"
#include "RigMainGrid.h"
#include "cafCmdExecCommandManager.h"
#include "cafPdmUiObjectHandle.h"
#include "cvfStructGrid.h"
#include <QAction>
CAF_CMD_SOURCE_INIT( RicEclipseShowOnlyFaultFeature, "RicEclipseShowOnlyFaultFeature" );
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RicEclipseShowOnlyFaultFeature::isCommandEnabled()
{
Rim3dView* view = RiaApplication::instance()->activeReservoirView();
if ( !view ) return false;
RimEclipseView* eclView = dynamic_cast<RimEclipseView*>( view );
if ( !eclView ) return false;
return true;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicEclipseShowOnlyFaultFeature::onActionTriggered( bool isChecked )
{
QVariant userData = this->userData();
if ( userData.isNull() || userData.type() != QVariant::String ) return;
QString faultName = userData.toString();
Rim3dView* view = RiaApplication::instance()->activeReservoirView();
if ( !view ) return;
RimEclipseView* eclView = dynamic_cast<RimEclipseView*>( view );
if ( !eclView ) return;
RimFaultInViewCollection* coll = eclView->faultCollection();
RimFaultInView* rimFault = coll->findFaultByName( faultName );
if ( !rimFault ) return;
if ( !rimFault->parentField() ) return;
std::vector<caf::PdmObjectHandle*> children;
rimFault->parentField()->childObjects( &children );
for ( auto& child : children )
{
caf::PdmUiObjectHandle* childUiObject = uiObj( child );
if ( childUiObject && childUiObject->objectToggleField() )
{
caf::PdmField<bool>* field = dynamic_cast<caf::PdmField<bool>*>( childUiObject->objectToggleField() );
if ( field ) field->setValueWithFieldChanged( false );
}
}
if ( rimFault )
{
rimFault->showFault.setValueWithFieldChanged( true );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicEclipseShowOnlyFaultFeature::setupActionLook( QAction* actionToSetup )
{
actionToSetup->setIcon( QIcon( ":/draw_style_faults_24x24.png" ) );
}

View File

@ -0,0 +1,34 @@
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2021 Equinor ASA
//
// 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.
//
/////////////////////////////////////////////////////////////////////////////////
#pragma once
#include "cafCmdFeature.h"
//==================================================================================================
///
//==================================================================================================
class RicEclipseShowOnlyFaultFeature : public caf::CmdFeature
{
CAF_CMD_HEADER_INIT;
protected:
bool isCommandEnabled() override;
void onActionTriggered( bool isChecked ) override;
void setupActionLook( QAction* actionToSetup ) override;
};

View File

@ -29,16 +29,20 @@
#include "cvfScalarMapper.h" #include "cvfScalarMapper.h"
#include "RigFault.h" #include "RigFault.h"
#include "RigNNCData.h"
#include "RigNncConnection.h"
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
RivFaultGeometryGenerator::RivFaultGeometryGenerator( const cvf::StructGridInterface* grid, RivFaultGeometryGenerator::RivFaultGeometryGenerator( const cvf::StructGridInterface* grid,
const RigFault* fault, const RigFault* fault,
RigNNCData* nncData,
bool computeNativeFaultFaces ) bool computeNativeFaultFaces )
: m_grid( grid ) : m_grid( grid )
, m_fault( fault ) , m_fault( fault )
, m_computeNativeFaultFaces( computeNativeFaultFaces ) , m_computeNativeFaultFaces( computeNativeFaultFaces )
, m_nncData( nncData )
{ {
m_quadMapper = new cvf::StructGridQuadToCellFaceMapper; m_quadMapper = new cvf::StructGridQuadToCellFaceMapper;
m_triangleMapper = new cvf::StuctGridTriangleToCellFaceMapper( m_quadMapper.p() ); m_triangleMapper = new cvf::StuctGridTriangleToCellFaceMapper( m_quadMapper.p() );
@ -54,9 +58,9 @@ RivFaultGeometryGenerator::~RivFaultGeometryGenerator()
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// Generate surface drawable geo from the specified region /// Generate surface drawable geo from the specified region
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
cvf::ref<cvf::DrawableGeo> RivFaultGeometryGenerator::generateSurface() cvf::ref<cvf::DrawableGeo> RivFaultGeometryGenerator::generateSurface( bool onlyShowFacesWithDefinedNeighbors )
{ {
computeArrays(); computeArrays( onlyShowFacesWithDefinedNeighbors );
CVF_ASSERT( m_vertices.notNull() ); CVF_ASSERT( m_vertices.notNull() );
@ -119,7 +123,28 @@ cvf::ref<cvf::DrawableGeo> RivFaultGeometryGenerator::createOutlineMeshDrawable(
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
void RivFaultGeometryGenerator::computeArrays() bool RivFaultGeometryGenerator::hasConnection( size_t cellIdx,
cvf::StructGridInterface::FaceType face,
RigConnectionContainer& conns )
{
cvf::StructGridInterface::FaceType oppositeFace = cvf::StructGridInterface::oppositeFace( face );
for ( size_t i = 0; i < conns.size(); i++ )
{
auto& r = conns[i];
if ( ( r.c1GlobIdx() == cellIdx ) && ( r.face() == face ) && r.hasCommonArea() ) return true;
if ( ( r.c2GlobIdx() == cellIdx ) && ( r.face() == oppositeFace ) && r.hasCommonArea() ) return true;
}
return false;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RivFaultGeometryGenerator::computeArrays( bool onlyShowFacesWithDefinedNeighbors )
{ {
std::vector<cvf::Vec3f> vertices; std::vector<cvf::Vec3f> vertices;
m_quadMapper->quadToCellIndexMap().clear(); m_quadMapper->quadToCellIndexMap().clear();
@ -127,6 +152,8 @@ void RivFaultGeometryGenerator::computeArrays()
cvf::Vec3d offset = m_grid->displayModelOffset(); cvf::Vec3d offset = m_grid->displayModelOffset();
auto& connections = m_nncData->connections();
const std::vector<RigFault::FaultFace>& faultFaces = m_fault->faultFaces(); const std::vector<RigFault::FaultFace>& faultFaces = m_fault->faultFaces();
#pragma omp parallel for #pragma omp parallel for
@ -135,23 +162,25 @@ void RivFaultGeometryGenerator::computeArrays()
size_t cellIndex = faultFaces[fIdx].m_nativeReservoirCellIndex; size_t cellIndex = faultFaces[fIdx].m_nativeReservoirCellIndex;
cvf::StructGridInterface::FaceType face = faultFaces[fIdx].m_nativeFace; cvf::StructGridInterface::FaceType face = faultFaces[fIdx].m_nativeFace;
if ( cellIndex >= m_cellVisibility->size() ) continue;
if ( !m_computeNativeFaultFaces ) if ( !m_computeNativeFaultFaces )
{ {
cellIndex = faultFaces[fIdx].m_oppositeReservoirCellIndex; cellIndex = faultFaces[fIdx].m_oppositeReservoirCellIndex;
face = cvf::StructGridInterface::oppositeFace( faultFaces[fIdx].m_nativeFace ); face = cvf::StructGridInterface::oppositeFace( face );
} }
if ( cellIndex >= m_cellVisibility->size() ) continue;
if ( !( *m_cellVisibility )[cellIndex] ) continue; if ( !( *m_cellVisibility )[cellIndex] ) continue;
if ( onlyShowFacesWithDefinedNeighbors && !hasConnection( cellIndex, face, connections ) ) continue;
cvf::Vec3d cornerVerts[8]; cvf::Vec3d cornerVerts[8];
m_grid->cellCornerVertices( cellIndex, cornerVerts ); m_grid->cellCornerVertices( cellIndex, cornerVerts );
cvf::ubyte faceConn[4]; cvf::ubyte faceConn[4];
m_grid->cellFaceVertexIndices( face, faceConn ); m_grid->cellFaceVertexIndices( face, faceConn );
// Critical section to avoid two threads accessing the arrays at the same time. // Critical section to avoid two threads accessing the arrays at the same time.
#pragma omp critical( critical_section_RivFaultGeometryGenerator_computeArrays ) #pragma omp critical( critical_section_RivFaultGeometryGenerator_computeArrays )
{ {
int n; int n;

View File

@ -32,6 +32,8 @@ class Transform;
class Part; class Part;
} // namespace cvf } // namespace cvf
class RigNNCData;
class RigConnectionContainer;
class RigFault; class RigFault;
//================================================================================================== //==================================================================================================
@ -42,7 +44,10 @@ class RigFault;
class RivFaultGeometryGenerator : public cvf::Object class RivFaultGeometryGenerator : public cvf::Object
{ {
public: public:
RivFaultGeometryGenerator( const cvf::StructGridInterface* grid, const RigFault* fault, bool computeNativeFaultFaces ); RivFaultGeometryGenerator( const cvf::StructGridInterface* grid,
const RigFault* fault,
RigNNCData* nncData,
bool computeNativeFaultFaces );
~RivFaultGeometryGenerator() override; ~RivFaultGeometryGenerator() override;
void setCellVisibility( const cvf::UByteArray* cellVisibilities ); void setCellVisibility( const cvf::UByteArray* cellVisibilities );
@ -53,18 +58,21 @@ public:
const cvf::StuctGridTriangleToCellFaceMapper* triangleToCellFaceMapper() { return m_triangleMapper.p(); } const cvf::StuctGridTriangleToCellFaceMapper* triangleToCellFaceMapper() { return m_triangleMapper.p(); }
// Generated geometry // Generated geometry
cvf::ref<cvf::DrawableGeo> generateSurface(); cvf::ref<cvf::DrawableGeo> generateSurface( bool onlyShowFacesWithDefinedNeighbors );
cvf::ref<cvf::DrawableGeo> createMeshDrawable(); cvf::ref<cvf::DrawableGeo> createMeshDrawable();
cvf::ref<cvf::DrawableGeo> createOutlineMeshDrawable( double creaseAngle ); cvf::ref<cvf::DrawableGeo> createOutlineMeshDrawable( double creaseAngle );
private: private:
void computeArrays(); void computeArrays( bool onlyShowFacesWithDefinedNeighbors );
bool hasConnection( size_t cellIdx, cvf::StructGridInterface::FaceType face, RigConnectionContainer& conns );
private: private:
// Input // Input
cvf::cref<cvf::StructGridInterface> m_grid; cvf::cref<cvf::StructGridInterface> m_grid;
cvf::cref<RigFault> m_fault; cvf::cref<RigFault> m_fault;
cvf::cref<cvf::UByteArray> m_cellVisibility; cvf::cref<cvf::UByteArray> m_cellVisibility;
cvf::ref<RigNNCData> m_nncData;
bool m_computeNativeFaultFaces; bool m_computeNativeFaultFaces;

View File

@ -24,6 +24,7 @@
#include "RigCaseCellResultsData.h" #include "RigCaseCellResultsData.h"
#include "RigMainGrid.h" #include "RigMainGrid.h"
#include "RigNNCData.h"
#include "RigResultAccessor.h" #include "RigResultAccessor.h"
#include "RimEclipseCase.h" #include "RimEclipseCase.h"
@ -74,8 +75,11 @@ RivFaultPartMgr::RivFaultPartMgr( const RigGridBase* grid,
cvf::ref<cvf::Array<size_t>> connIdxes = new cvf::Array<size_t>; cvf::ref<cvf::Array<size_t>> connIdxes = new cvf::Array<size_t>;
connIdxes->assign( rimFault->faultGeometry()->connectionIndices() ); connIdxes->assign( rimFault->faultGeometry()->connectionIndices() );
m_nativeFaultGenerator = new RivFaultGeometryGenerator( grid, rimFault->faultGeometry(), true ); m_nativeFaultGenerator =
m_oppositeFaultGenerator = new RivFaultGeometryGenerator( grid, rimFault->faultGeometry(), false ); new RivFaultGeometryGenerator( grid, rimFault->faultGeometry(), grid->mainGrid()->nncData(), true );
m_oppositeFaultGenerator =
new RivFaultGeometryGenerator( grid, rimFault->faultGeometry(), grid->mainGrid()->nncData(), false );
m_nativeFaultFacesTextureCoords = new cvf::Vec2fArray; m_nativeFaultFacesTextureCoords = new cvf::Vec2fArray;
m_oppositeFaultFacesTextureCoords = new cvf::Vec2fArray; m_oppositeFaultFacesTextureCoords = new cvf::Vec2fArray;
@ -280,7 +284,8 @@ void RivFaultPartMgr::generatePartGeometry()
bool useBufferObjects = true; bool useBufferObjects = true;
// Surface geometry // Surface geometry
{ {
cvf::ref<cvf::DrawableGeo> geo = m_nativeFaultGenerator->generateSurface(); cvf::ref<cvf::DrawableGeo> geo =
m_nativeFaultGenerator->generateSurface( m_rimFaultCollection->onlyShowFacesWithDefinedNeighbor() );
if ( geo.notNull() ) if ( geo.notNull() )
{ {
geo->computeNormals(); geo->computeNormals();
@ -333,7 +338,8 @@ void RivFaultPartMgr::generatePartGeometry()
// Surface geometry // Surface geometry
{ {
cvf::ref<cvf::DrawableGeo> geo = m_oppositeFaultGenerator->generateSurface(); cvf::ref<cvf::DrawableGeo> geo =
m_oppositeFaultGenerator->generateSurface( m_rimFaultCollection->onlyShowFacesWithDefinedNeighbor() );
if ( geo.notNull() ) if ( geo.notNull() )
{ {
geo->computeNormals(); geo->computeNormals();

View File

@ -37,6 +37,7 @@ class RimEclipseCellColors;
class RimCellEdgeColors; class RimCellEdgeColors;
class RimFaultInViewCollection; class RimFaultInViewCollection;
class RigGridBase; class RigGridBase;
class RimFaultInViewCollection; class RimFaultInViewCollection;
class RimFaultInView; class RimFaultInView;
class RivFaultGeometryGenerator; class RivFaultGeometryGenerator;

View File

@ -118,8 +118,6 @@ void RivReservoirFaultsPartMgr::appendPartsToModel( cvf::ModelBasicList* model )
forceDisplayOfFault = true; forceDisplayOfFault = true;
} }
// qDebug() << forceDisplayOfFault;
cvf::ModelBasicList parts; cvf::ModelBasicList parts;
for ( size_t i = 0; i < faultCollection->faults.size(); i++ ) for ( size_t i = 0; i < faultCollection->faults.size(); i++ )

View File

@ -39,6 +39,7 @@
#include "cafAppEnum.h" #include "cafAppEnum.h"
#include "cafPdmFieldCvfColor.h" #include "cafPdmFieldCvfColor.h"
#include "cafPdmFieldCvfMat4d.h" #include "cafPdmFieldCvfMat4d.h"
#include "cafPdmUiCheckBoxEditor.h"
#include "cafPdmUiTreeOrdering.h" #include "cafPdmUiTreeOrdering.h"
namespace caf namespace caf
@ -65,31 +66,38 @@ RimFaultInViewCollection::RimFaultInViewCollection()
CAF_PDM_InitField( &showFaultCollection, "Active", true, "Active", "", "", "" ); CAF_PDM_InitField( &showFaultCollection, "Active", true, "Active", "", "", "" );
showFaultCollection.uiCapability()->setUiHidden( true ); showFaultCollection.uiCapability()->setUiHidden( true );
CAF_PDM_InitField( &showFaultFaces, "ShowFaultFaces", true, "Show Defined faces", "", "", "" ); CAF_PDM_InitField( &showFaultFaces, "ShowFaultFaces", true, "Show Defined faces" );
CAF_PDM_InitField( &showOppositeFaultFaces, "ShowOppositeFaultFaces", true, "Show Opposite Faces", "", "", "" ); caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &showFaultFaces );
CAF_PDM_InitField( &m_showFaultsOutsideFilters, "ShowFaultsOutsideFilters", true, "Show Faults Outside Filters", "", "", "" );
CAF_PDM_InitField( &showOppositeFaultFaces, "ShowOppositeFaultFaces", true, "Show Opposite Faces" );
caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &showOppositeFaultFaces );
CAF_PDM_InitField( &m_showFaultsOutsideFilters, "ShowFaultsOutsideFilters", true, "Show Faults Outside Filters" );
caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_showFaultsOutsideFilters );
CAF_PDM_InitField( &m_onlyShowWithNeighbor, "OnlyShowWithDefNeighbor", false, "Only Show Faces With Defined Cell Neighbor" );
caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &m_onlyShowWithNeighbor );
CAF_PDM_InitField( &faultResult, CAF_PDM_InitField( &faultResult,
"FaultFaceCulling", "FaultFaceCulling",
caf::AppEnum<RimFaultInViewCollection::FaultFaceCullingMode>( caf::AppEnum<RimFaultInViewCollection::FaultFaceCullingMode>(
RimFaultInViewCollection::FAULT_BACK_FACE_CULLING ), RimFaultInViewCollection::FAULT_BACK_FACE_CULLING ),
"Dynamic Face Selection", "Dynamic Face Selection" );
"",
"", CAF_PDM_InitField( &showFaultLabel, "ShowFaultLabel", false, "Show Labels" );
"" ); caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &showFaultLabel );
CAF_PDM_InitField( &showFaultLabel, "ShowFaultLabel", false, "Show Labels", "", "", "" );
cvf::Color3f defWellLabelColor = RiaPreferences::current()->defaultWellLabelColor(); cvf::Color3f defWellLabelColor = RiaPreferences::current()->defaultWellLabelColor();
CAF_PDM_InitField( &faultLabelColor, "FaultLabelColor", defWellLabelColor, "Label Color", "", "", "" ); CAF_PDM_InitField( &faultLabelColor, "FaultLabelColor", defWellLabelColor, "Label Color", "", "", "" );
CAF_PDM_InitField( &showNNCs, "ShowNNCs", true, "Show NNCs", "", "", "" ); CAF_PDM_InitField( &showNNCs, "ShowNNCs", true, "Show NNCs" );
caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &showNNCs );
CAF_PDM_InitField( &hideNncsWhenNoResultIsAvailable, CAF_PDM_InitField( &hideNncsWhenNoResultIsAvailable,
"HideNncsWhenNoResultIsAvailable", "HideNncsWhenNoResultIsAvailable",
true, true,
"Hide NNC Geometry if No NNC Result is Available", "Hide NNC Geometry if No NNC Result is Available" );
"", caf::PdmUiNativeCheckBoxEditor::configureFieldForEditor( &hideNncsWhenNoResultIsAvailable );
"",
"" );
CAF_PDM_InitFieldNoDefault( &faults, "Faults", "Faults", "", "", "" ); CAF_PDM_InitFieldNoDefault( &faults, "Faults", "Faults", "", "", "" );
faults.uiCapability()->setUiTreeHidden( true ); faults.uiCapability()->setUiTreeHidden( true );
@ -127,10 +135,16 @@ void RimFaultInViewCollection::fieldChangedByUi( const caf::PdmFieldHandle* chan
parentView()->intersectionCollection()->scheduleCreateDisplayModelAndRedraw2dIntersectionViews(); parentView()->intersectionCollection()->scheduleCreateDisplayModelAndRedraw2dIntersectionViews();
} }
if ( changedField == &m_onlyShowWithNeighbor )
{
parentView()->scheduleReservoirGridGeometryRegen();
}
if ( &showFaultFaces == changedField || &showOppositeFaultFaces == changedField || if ( &showFaultFaces == changedField || &showOppositeFaultFaces == changedField ||
&showFaultCollection == changedField || &showFaultLabel == changedField || &showFaultCollection == changedField || &showFaultLabel == changedField ||
&m_showFaultsOutsideFilters == changedField || &faultLabelColor == changedField || &m_showFaultsOutsideFilters == changedField || &faultLabelColor == changedField ||
&faultResult == changedField || &showNNCs == changedField || &hideNncsWhenNoResultIsAvailable == changedField ) &m_onlyShowWithNeighbor == changedField || &faultResult == changedField || &showNNCs == changedField ||
&hideNncsWhenNoResultIsAvailable == changedField )
{ {
parentView()->scheduleCreateDisplayModelAndRedraw(); parentView()->scheduleCreateDisplayModelAndRedraw();
parentView()->intersectionCollection()->scheduleCreateDisplayModelAndRedraw2dIntersectionViews(); parentView()->intersectionCollection()->scheduleCreateDisplayModelAndRedraw2dIntersectionViews();
@ -286,6 +300,7 @@ void RimFaultInViewCollection::uiOrderingFaults( QString uiConfigName, caf::PdmU
ffviz->add( &showFaultFaces ); ffviz->add( &showFaultFaces );
ffviz->add( &showOppositeFaultFaces ); ffviz->add( &showOppositeFaultFaces );
ffviz->add( &faultResult ); ffviz->add( &faultResult );
ffviz->add( &m_onlyShowWithNeighbor );
caf::PdmUiGroup* nncViz = uiOrdering.addNewGroup( "NNC Visibility" ); caf::PdmUiGroup* nncViz = uiOrdering.addNewGroup( "NNC Visibility" );
nncViz->setCollapsedByDefault( true ); nncViz->setCollapsedByDefault( true );
@ -368,6 +383,14 @@ void RimFaultInViewCollection::setShowFaultsOutsideFilter( bool show )
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
bool RimFaultInViewCollection::onlyShowFacesWithDefinedNeighbor() const
{
return m_onlyShowWithNeighbor;
}
//-------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimFaultRASettings* RimFaultInViewCollection::faultRASettings() const RimFaultRASettings* RimFaultInViewCollection::faultRASettings() const
{ {
return m_faultRASettings(); return m_faultRASettings();

View File

@ -62,6 +62,8 @@ public:
bool isShowingFaultsAndFaultsOutsideFilters() const; bool isShowingFaultsAndFaultsOutsideFilters() const;
void setShowFaultsOutsideFilter( bool show ); void setShowFaultsOutsideFilter( bool show );
bool onlyShowFacesWithDefinedNeighbor() const;
RimFaultRASettings* faultRASettings() const; RimFaultRASettings* faultRASettings() const;
bool faultRAEnabled() const; bool faultRAEnabled() const;
bool faultRAAdvancedEnabled() const; bool faultRAAdvancedEnabled() const;
@ -95,6 +97,7 @@ private:
private: private:
caf::PdmField<bool> m_showFaultsOutsideFilters; caf::PdmField<bool> m_showFaultsOutsideFilters;
caf::PdmField<bool> m_onlyShowWithNeighbor;
caf::PdmChildField<RimFaultRASettings*> m_faultRASettings; caf::PdmChildField<RimFaultRASettings*> m_faultRASettings;
caf::PdmField<bool> m_enableFaultRA; caf::PdmField<bool> m_enableFaultRA;

View File

@ -447,6 +447,12 @@ void RiuViewerCommands::displayContextMenu( QMouseEvent* event )
QString( "Hide " ) + faultName, QString( "Hide " ) + faultName,
hideFaultList ); hideFaultList );
menuBuilder.addCmdFeatureWithUserData( "RicEclipseShowOnlyFaultFeature",
QString( "Show " ) + faultName + QString( " - Others Off" ),
QVariant( fault->name() ) );
menuBuilder.addSeparator();
if ( eclipseView->faultCollection() && eclipseView->faultCollection()->faultRAEnabled() ) if ( eclipseView->faultCollection() && eclipseView->faultCollection()->faultRAEnabled() )
{ {
menuBuilder.subMenuStart( "Reactivation Assessment" ); menuBuilder.subMenuStart( "Reactivation Assessment" );