mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
Add support for user defined index filters, makes some debugging tasks easier
This commit is contained in:
@@ -12,6 +12,7 @@ set(SOURCE_GROUP_HEADER_FILES
|
||||
${CMAKE_CURRENT_LIST_DIR}/RimUserDefinedFilter.h
|
||||
${CMAKE_CURRENT_LIST_DIR}/RimCellFilterIntervalTool.h
|
||||
${CMAKE_CURRENT_LIST_DIR}/RimCellIndexFilter.h
|
||||
${CMAKE_CURRENT_LIST_DIR}/RimUserDefinedIndexFilter.h
|
||||
)
|
||||
|
||||
set(SOURCE_GROUP_SOURCE_FILES
|
||||
@@ -28,6 +29,7 @@ set(SOURCE_GROUP_SOURCE_FILES
|
||||
${CMAKE_CURRENT_LIST_DIR}/RimUserDefinedFilter.cpp
|
||||
${CMAKE_CURRENT_LIST_DIR}/RimCellFilterIntervalTool.cpp
|
||||
${CMAKE_CURRENT_LIST_DIR}/RimCellIndexFilter.cpp
|
||||
${CMAKE_CURRENT_LIST_DIR}/RimUserDefinedIndexFilter.cpp
|
||||
)
|
||||
|
||||
list(APPEND CODE_HEADER_FILES ${SOURCE_GROUP_HEADER_FILES})
|
||||
|
||||
@@ -25,6 +25,7 @@
|
||||
#include "RimCellRangeFilter.h"
|
||||
#include "RimPolygonFilter.h"
|
||||
#include "RimUserDefinedFilter.h"
|
||||
#include "RimUserDefinedIndexFilter.h"
|
||||
#include "RimViewController.h"
|
||||
#include "RimViewLinker.h"
|
||||
|
||||
@@ -278,6 +279,18 @@ RimUserDefinedFilter* RimCellFilterCollection::addNewUserDefinedFilter( RimCase*
|
||||
return pFilter;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimUserDefinedIndexFilter* RimCellFilterCollection::addNewUserDefinedIndexFilter( RimCase* srcCase )
|
||||
{
|
||||
RimUserDefinedIndexFilter* pFilter = new RimUserDefinedIndexFilter();
|
||||
pFilter->setCase( srcCase );
|
||||
addFilter( pFilter );
|
||||
onFilterUpdated( pFilter );
|
||||
return pFilter;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -338,7 +351,7 @@ void RimCellFilterCollection::setAutoName( RimCellFilter* pFilter )
|
||||
}
|
||||
else if ( dynamic_cast<RimUserDefinedFilter*>( pFilter ) )
|
||||
{
|
||||
pFilter->setName( QString( "User Defined Filter %1" ).arg( QString::number( nUserFilters ) ) );
|
||||
pFilter->setName( QString( "User Defined IJK Filter %1" ).arg( QString::number( nUserFilters ) ) );
|
||||
}
|
||||
else if ( dynamic_cast<RimPolygonFilter*>( pFilter ) )
|
||||
{
|
||||
@@ -348,6 +361,10 @@ void RimCellFilterCollection::setAutoName( RimCellFilter* pFilter )
|
||||
{
|
||||
pFilter->setName( QString( "Index Filter %1" ).arg( QString::number( nIndexFilters ) ) );
|
||||
}
|
||||
else if ( dynamic_cast<RimUserDefinedIndexFilter*>( pFilter ) )
|
||||
{
|
||||
pFilter->setName( QString( "User Defined Index Filter %1" ).arg( QString::number( nIndexFilters ) ) );
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -30,6 +30,7 @@ class RimCellIndexFilter;
|
||||
class RimCellRangeFilter;
|
||||
class RimPolygonFilter;
|
||||
class RimUserDefinedFilter;
|
||||
class RimUserDefinedIndexFilter;
|
||||
class RimCase;
|
||||
|
||||
namespace cvf
|
||||
@@ -51,10 +52,11 @@ public:
|
||||
|
||||
caf::Signal<> filtersChanged;
|
||||
|
||||
RimPolygonFilter* addNewPolygonFilter( RimCase* srcCase );
|
||||
RimUserDefinedFilter* addNewUserDefinedFilter( RimCase* srcCase );
|
||||
RimCellRangeFilter* addNewCellRangeFilter( RimCase* srcCase, int gridIndex, int sliceDirection = -1, int defaultSlice = -1 );
|
||||
RimCellIndexFilter* addNewCellIndexFilter( RimCase* srcCase );
|
||||
RimPolygonFilter* addNewPolygonFilter( RimCase* srcCase );
|
||||
RimCellRangeFilter* addNewCellRangeFilter( RimCase* srcCase, int gridIndex, int sliceDirection = -1, int defaultSlice = -1 );
|
||||
RimCellIndexFilter* addNewCellIndexFilter( RimCase* srcCase );
|
||||
RimUserDefinedFilter* addNewUserDefinedFilter( RimCase* srcCase );
|
||||
RimUserDefinedIndexFilter* addNewUserDefinedIndexFilter( RimCase* srcCase );
|
||||
|
||||
void removeFilter( RimCellFilter* filter );
|
||||
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2023 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 "RimUserDefinedIndexFilter.h"
|
||||
|
||||
#include "cafPdmUiListEditor.h"
|
||||
|
||||
#include "cvfStructGridGeometryGenerator.h"
|
||||
|
||||
CAF_PDM_SOURCE_INIT( RimUserDefinedIndexFilter, "RimUserDefinedIndexFilter" );
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimUserDefinedIndexFilter::RimUserDefinedIndexFilter()
|
||||
: RimCellFilter( RimCellFilter::INDEX )
|
||||
{
|
||||
CAF_PDM_InitObject( "User Defined Index Filter", ":/CellFilter_UserDefined.png" );
|
||||
CAF_PDM_InitFieldNoDefault( &m_individualCellIndexes, "IndividualCellIndexes", "Cells", "", "Use Ctrl-C for copy and Ctrl-V for paste", "" );
|
||||
m_individualCellIndexes.uiCapability()->setUiEditorTypeName( caf::PdmUiListEditor::uiEditorTypeName() );
|
||||
|
||||
m_propagateToSubGrids = true;
|
||||
|
||||
updateIconState();
|
||||
setDeletable( true );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
RimUserDefinedIndexFilter::~RimUserDefinedIndexFilter()
|
||||
{
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
QString RimUserDefinedIndexFilter::fullName() const
|
||||
{
|
||||
return QString( "%1 [%2 cells]" ).arg( RimCellFilter::fullName(), QString::number( m_individualCellIndexes().size() ) );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimUserDefinedIndexFilter::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering )
|
||||
{
|
||||
RimCellFilter::defineUiOrdering( uiConfigName, uiOrdering );
|
||||
|
||||
auto group = uiOrdering.addNewGroup( QString( "Cell Indexes to " ) + modeString() );
|
||||
group->add( &m_individualCellIndexes );
|
||||
|
||||
uiOrdering.skipRemainingFields( true );
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimUserDefinedIndexFilter::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue )
|
||||
{
|
||||
if ( changedField != &m_name )
|
||||
{
|
||||
filterChanged.send();
|
||||
updateIconState();
|
||||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimUserDefinedIndexFilter::updateCellIndexFilter( cvf::UByteArray* includeVisibility, cvf::UByteArray* excludeVisibility, int gridIndex )
|
||||
{
|
||||
if ( gridIndex != m_gridIndex() ) return;
|
||||
|
||||
if ( m_filterMode == FilterModeType::INCLUDE )
|
||||
{
|
||||
for ( auto cellIdx : m_individualCellIndexes() )
|
||||
{
|
||||
( *includeVisibility )[cellIdx] = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for ( auto cellIdx : m_individualCellIndexes() )
|
||||
{
|
||||
( *excludeVisibility )[cellIdx] = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,48 @@
|
||||
/////////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Copyright (C) 2023 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 "RimCellFilter.h"
|
||||
|
||||
#include "cafAppEnum.h"
|
||||
#include "cafPdmField.h"
|
||||
#include "cafPdmObject.h"
|
||||
|
||||
//==================================================================================================
|
||||
///
|
||||
///
|
||||
//==================================================================================================
|
||||
class RimUserDefinedIndexFilter : public RimCellFilter
|
||||
{
|
||||
CAF_PDM_HEADER_INIT;
|
||||
|
||||
public:
|
||||
RimUserDefinedIndexFilter();
|
||||
~RimUserDefinedIndexFilter() override;
|
||||
|
||||
void updateCellIndexFilter( cvf::UByteArray* includeVisibility, cvf::UByteArray* excludeVisibility, int gridIndex ) override;
|
||||
|
||||
protected:
|
||||
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
|
||||
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
|
||||
QString fullName() const override;
|
||||
|
||||
private:
|
||||
caf::PdmField<std::vector<int>> m_individualCellIndexes;
|
||||
};
|
||||
@@ -1050,6 +1050,7 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection()
|
||||
{
|
||||
menuBuilder << "RicNewPolygonFilterFeature";
|
||||
menuBuilder << "RicNewUserDefinedFilterFeature";
|
||||
menuBuilder << "RicNewUserDefinedIndexFilterFeature";
|
||||
menuBuilder << "RicNewCellIndexFilterFeature";
|
||||
menuBuilder << "Separator";
|
||||
menuBuilder << "RicNewCellRangeFilterFeature";
|
||||
|
||||
Reference in New Issue
Block a user