Add support for K filter to polyline intersections (#10302)

* Add support for K filter to polyline intersections
This commit is contained in:
jonjenssen
2023-05-25 08:14:43 +02:00
committed by GitHub
parent fe5c24ef5d
commit 1063d7f3d3
15 changed files with 181 additions and 60 deletions

View File

@@ -90,9 +90,10 @@ bool RimCellFilterIntervalTool::isNumberIncluded( size_t number ) const
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
size_t RimCellFilterIntervalTool::numberFromPart( QString strVal ) const
size_t RimCellFilterIntervalTool::numberFromPart( std::string strVal ) const
{
return strVal.toUInt();
QString qStrVal = QString::fromStdString( strVal );
return qStrVal.toUInt();
}
//--------------------------------------------------------------------------------------------------
@@ -100,13 +101,15 @@ size_t RimCellFilterIntervalTool::numberFromPart( QString strVal ) const
// Define a range with the comma separated format A,B,C-D, etc., i.e. 1,4,5-8
// Only positive numbers are supported.
//--------------------------------------------------------------------------------------------------
void RimCellFilterIntervalTool::setInterval( bool enabled, QString intervalText )
void RimCellFilterIntervalTool::setInterval( bool enabled, std::string intervalText )
{
m_intervals.clear();
if ( !enabled ) return;
QStringList parts = RiaTextStringTools::splitSkipEmptyParts( intervalText, "," );
QString qIntervalText = QString::fromStdString( intervalText );
QStringList parts = RiaTextStringTools::splitSkipEmptyParts( qIntervalText, "," );
for ( auto& part : parts )
{
@@ -114,10 +117,11 @@ void RimCellFilterIntervalTool::setInterval( bool enabled, QString intervalText
switch ( minmax.size() )
{
case 1:
m_intervals.push_back( RimCellFilterInterval( numberFromPart( minmax[0] ) ) );
m_intervals.push_back( RimCellFilterInterval( numberFromPart( minmax[0].toStdString() ) ) );
break;
case 2:
m_intervals.push_back( RimCellFilterInterval( numberFromPart( minmax[0] ), numberFromPart( minmax[1] ) ) );
m_intervals.push_back(
RimCellFilterInterval( numberFromPart( minmax[0].toStdString() ), numberFromPart( minmax[1].toStdString() ) ) );
break;
default:

View File

@@ -18,8 +18,8 @@
#pragma once
#include <QString>
#include <list>
#include <string>
class RimCellFilterInterval
{
@@ -42,14 +42,14 @@ public:
RimCellFilterIntervalTool( bool includeAllByDefault = true );
~RimCellFilterIntervalTool();
void setInterval( bool enabled, QString intervalText );
void setInterval( bool enabled, std::string intervalText );
bool isNumberIncluded( size_t number ) const;
private:
size_t numberFromPart( QString strVal ) const;
size_t numberFromPart( std::string strVal ) const;
bool m_includeAllByDefault;
QString m_intervalText;
bool m_includeAllByDefault;
std::string m_intervalText;
std::list<RimCellFilterInterval> m_intervals;
};

View File

@@ -812,7 +812,7 @@ void RimPolygonFilter::updateCells()
initializeCellList();
// get optional k-cell filter
m_intervalTool.setInterval( m_enableKFilter, m_kFilterStr );
m_intervalTool.setInterval( m_enableKFilter, m_kFilterStr().toStdString() );
// get polyline as vector
std::vector<cvf::Vec3d> points;

View File

@@ -125,16 +125,16 @@ private:
caf::PdmField<caf::AppEnum<PolygonIncludeType>> m_polyIncludeType;
caf::PdmPtrField<RimCase*> m_srcCase;
caf::PdmField<bool> m_enableFiltering;
caf::PdmField<bool> m_enableKFilter;
caf::PdmField<bool> m_showLines;
caf::PdmField<bool> m_showSpheres;
caf::PdmField<QString> m_kFilterStr;
caf::PdmField<int> m_lineThickness;
caf::PdmField<double> m_sphereRadiusFactor;
caf::PdmField<cvf::Color3f> m_lineColor;
caf::PdmField<cvf::Color3f> m_sphereColor;
caf::PdmField<double> m_polygonPlaneDepth;
caf::PdmField<bool> m_lockPolygonToPlane;
caf::PdmField<bool> m_enableKFilter;
caf::PdmField<QString> m_kFilterStr;
std::shared_ptr<RicPolylineTargetsPickEventHandler> m_pickTargetsEventHandler;