Skip to content

Commit

Permalink
wip polygon as child
Browse files Browse the repository at this point in the history
  • Loading branch information
magnesj committed Feb 9, 2024
1 parent 839465d commit 2d812e6
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,9 @@
#include "RigPolyLinesData.h"
#include "RigReservoirGridTools.h"

#include "Polygons/RimPolygon.h"
#include "Polygons/RimPolygonInView.h"

#include "Rim3dView.h"
#include "RimCase.h"
#include "RimCellFilterCollection.h"
Expand All @@ -54,6 +57,7 @@

#include <QValidator>

#include "RimTools.h"
#include <limits>

namespace caf
Expand Down Expand Up @@ -129,6 +133,14 @@ RimPolygonFilter::RimPolygonFilter()

CAF_PDM_InitFieldNoDefault( &m_polyIncludeType, "PolyIncludeType", "Cells to include" );

CAF_PDM_InitFieldNoDefault( &m_cellFilterPolygon, "Polygon", "Polygon" );
CAF_PDM_InitFieldNoDefault( &m_localPolygon, "LocalPolygon", "Local Polygon" );
m_localPolygon = new RimPolygon;
m_localPolygon->setName( "Local Polygon" );

CAF_PDM_InitFieldNoDefault( &m_polygonEditor, "LocalPolygonInView", "Local Polygon In View" );
m_polygonEditor = new RimPolygonInView;

CAF_PDM_InitField( &m_enablePicking, "EnablePicking", false, "" );
caf::PdmUiPushButtonEditor::configureEditorForField( &m_enablePicking );
m_enablePicking.uiCapability()->setUiLabelPosition( caf::PdmUiItemInfo::LabelPosType::HIDDEN );
Expand Down Expand Up @@ -240,6 +252,8 @@ QString RimPolygonFilter::fullName() const
//--------------------------------------------------------------------------------------------------
std::vector<RimPolylineTarget*> RimPolygonFilter::activeTargets() const
{
if ( m_polygonEditor ) return m_polygonEditor->activeTargets();

return m_targets.childrenByType();
}

Expand All @@ -248,11 +262,15 @@ std::vector<RimPolylineTarget*> RimPolygonFilter::activeTargets() const
//--------------------------------------------------------------------------------------------------
void RimPolygonFilter::insertTarget( const RimPolylineTarget* targetToInsertBefore, RimPolylineTarget* targetToInsert )
{
size_t index = m_targets.indexOf( targetToInsertBefore );
if ( index < m_targets.size() )
m_targets.insert( index, targetToInsert );
else
m_targets.push_back( targetToInsert );
if ( m_polygonEditor ) m_polygonEditor->insertTarget( targetToInsertBefore, targetToInsert );

/*
size_t index = m_targets.indexOf( targetToInsertBefore );
if ( index < m_targets.size() )
m_targets.insert( index, targetToInsert );
else
m_targets.push_back( targetToInsert );
*/

updateCells();
}
Expand All @@ -262,6 +280,8 @@ void RimPolygonFilter::insertTarget( const RimPolylineTarget* targetToInsertBefo
//--------------------------------------------------------------------------------------------------
void RimPolygonFilter::deleteTarget( RimPolylineTarget* targetToDelete )
{
if ( m_polygonEditor ) m_polygonEditor->deleteTarget( targetToDelete );

m_targets.removeChild( targetToDelete );
delete targetToDelete;
}
Expand Down Expand Up @@ -362,10 +382,13 @@ void RimPolygonFilter::defineUiOrdering( QString uiConfigName, caf::PdmUiOrderin
group->add( &m_enableFiltering );
group->add( &m_closePolygon );

uiOrdering.add( &m_cellFilterPolygon );
m_polygonEditor->setPolygon( m_cellFilterPolygon() );

auto group1 = uiOrdering.addNewGroup( "Polygon Selection" );
group1->add( &m_polyFilterMode );
if ( m_closePolygon() ) group1->add( &m_polyIncludeType );
group1->add( &m_targets );
// group1->add( &m_targets );
group1->add( &m_enablePicking );

m_polyIncludeType.uiCapability()->setUiName( "Cells to " + modeString() );
Expand Down Expand Up @@ -411,6 +434,25 @@ void RimPolygonFilter::defineUiOrdering( QString uiConfigName, caf::PdmUiOrderin
{
m_polyFilterMode.uiCapability()->setUiReadOnly( readOnlyState );
}

caf::PdmUiGroup* polygonEditorGroup = uiOrdering.addNewGroup( "Polygon Editor" );
m_polygonEditor->uiOrdering( uiConfigName, *polygonEditorGroup );
}

//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QList<caf::PdmOptionItemInfo> RimPolygonFilter::calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions )
{
QList<caf::PdmOptionItemInfo> options;
if ( fieldNeedingOptions == &m_cellFilterPolygon )
{
options.push_back( caf::PdmOptionItemInfo( "Local Polygon", m_localPolygon() ) );

RimTools::polygonOptionItems( &options );
}

return options;
}

//--------------------------------------------------------------------------------------------------
Expand Down Expand Up @@ -461,6 +503,8 @@ bool RimPolygonFilter::pickingEnabled() const
//--------------------------------------------------------------------------------------------------
caf::PickEventHandler* RimPolygonFilter::pickEventHandler() const
{
if ( m_polygonEditor ) m_polygonEditor->pickEventHandler();

return m_pickTargetsEventHandler.get();
}

Expand Down Expand Up @@ -865,10 +909,21 @@ void RimPolygonFilter::updateCells()

// get polyline as vector
std::vector<cvf::Vec3d> points;

if ( m_polygonEditor )
{
for ( auto target : m_polygonEditor->activeTargets() )
{
points.push_back( target->targetPointXYZ() );
}
}

/*
for ( auto& target : m_targets )
{
if ( target->isEnabled() ) points.push_back( target->targetPointXYZ() );
}
*/

// We need at least three points to make a closed polygon, or just 2 for a polyline
if ( ( !m_closePolygon() && ( points.size() < 2 ) ) || ( m_closePolygon() && ( points.size() < 3 ) ) ) return;
Expand All @@ -894,6 +949,8 @@ void RimPolygonFilter::updateCells()
//--------------------------------------------------------------------------------------------------
cvf::ref<RigPolyLinesData> RimPolygonFilter::polyLinesData() const
{
if ( m_polygonEditor ) return m_polygonEditor->polyLinesData();

cvf::ref<RigPolyLinesData> pld = new RigPolyLinesData;
std::vector<cvf::Vec3d> line;
for ( const RimPolylineTarget* target : m_targets )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@

#include "cafAppEnum.h"
#include "cafPdmChildArrayField.h"
#include "cafPdmChildField.h"
#include "cafPdmField.h"
#include "cafPdmFieldCvfColor.h"
#include "cafPdmFieldCvfVec3d.h"
Expand All @@ -47,6 +48,8 @@ class RigMainGrid;
class RigFemPartGrid;
class RigPolylinesData;
class RigEclipseCaseData;
class RimPolygon;
class RimPolygonInView;

//==================================================================================================
///
Expand Down Expand Up @@ -96,6 +99,7 @@ class RimPolygonFilter : public RimCellFilter, public RimPolylinePickerInterface
protected:
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override;

QString fullName() const override;

Expand Down Expand Up @@ -140,4 +144,8 @@ class RimPolygonFilter : public RimCellFilter, public RimPolylinePickerInterface
std::vector<std::vector<size_t>> m_cells;

RimCellFilterIntervalTool m_intervalTool;

caf::PdmPtrField<RimPolygon*> m_cellFilterPolygon;
caf::PdmChildField<RimPolygon*> m_localPolygon;
caf::PdmChildField<RimPolygonInView*> m_polygonEditor;
};
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@ void RimPolygonInView::defineUiOrdering( QString uiConfigName, caf::PdmUiOrderin
{
updateNameField();

uiOrdering.add( m_polygon );
if ( m_polygon() ) uiOrdering.add( m_polygon );
uiOrdering.add( &m_enablePicking );
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ class RimPolygonInView : public RimCheckableNamedObject, public RimPolylinesData
bool pickingEnabled() const override;
caf::PickEventHandler* pickEventHandler() const override;

cvf::ref<RigPolyLinesData> polyLinesData() const override;

void onChildrenUpdated( caf::PdmChildArrayFieldHandle* childArray, std::vector<caf::PdmObjectHandle*>& updatedObjects ) override;

protected:
Expand All @@ -73,8 +75,7 @@ class RimPolygonInView : public RimCheckableNamedObject, public RimPolylinesData
void defineCustomContextMenu( const caf::PdmFieldHandle* fieldNeedingMenu, QMenu* menu, QWidget* fieldEditorWidget ) override;

private:
void updateNameField();
cvf::ref<RigPolyLinesData> polyLinesData() const override;
void updateNameField();

void updatePolygonFromTargets();
void updateTargetsFromPolygon();
Expand Down

0 comments on commit 2d812e6

Please sign in to comment.