From c66d29e6ea79af1117c89d71f654ca05fe57d8d7 Mon Sep 17 00:00:00 2001 From: Magne Sjaastad Date: Fri, 17 Apr 2026 20:48:44 +0200 Subject: [PATCH] #13894 PolygonInView: Refresh owning picker editors when toggling picking After migrating m_enablePicking from a PdmField to a PdmUiButton callback, the RimPolygonFilter parent was no longer notified via childFieldChangedByUi, so its 3D editor did not register or unregister the pick event handler and the button label did not refresh. Route the toggle through a helper that also calls updateEditorsAndVisualization on the owning RimPolylinePickerInterface. --- .../Polygons/RimPolygonInView.cpp | 36 +++++++++++-------- .../Polygons/RimPolygonInView.h | 1 + 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonInView.cpp b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonInView.cpp index af4e390e37..c7e7774e66 100644 --- a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonInView.cpp +++ b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonInView.cpp @@ -252,6 +252,26 @@ void RimPolygonInView::updatePolygonFromTargets() } } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimPolygonInView::togglePicking() +{ + m_enablePicking = !m_enablePicking; + + updateConnectedEditors(); + + // When embedded in a RimPolygonFilter, the property panel and 3D editor are bound to the filter, + // not to this polygon-in-view. Ask the owning picker interface to refresh its editors so the + // button label updates and the pick event handler is (un)registered. + if ( auto owner = firstAncestorOfType() ) + { + owner->updateEditorsAndVisualization(); + } + + updateVisualization(); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -297,13 +317,7 @@ void RimPolygonInView::defineUiOrdering( QString uiConfigName, caf::PdmUiOrderin if ( enableEdit ) { - uiOrdering.addNewButton( m_enablePicking ? "Stop Picking Points" : "Start Picking Points", - [this]() - { - m_enablePicking = !m_enablePicking; - updateConnectedEditors(); - updateVisualization(); - } ); + uiOrdering.addNewButton( m_enablePicking ? "Stop Picking Points" : "Start Picking Points", [this]() { togglePicking(); } ); uiOrdering.add( &m_targets ); uiOrdering.add( &m_handleScalingFactor ); } @@ -378,13 +392,7 @@ void RimPolygonInView::defineObjectEditorAttribute( QString uiConfigName, caf::P //-------------------------------------------------------------------------------------------------- void RimPolygonInView::uiOrderingForLocalPolygon( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) { - uiOrdering.addNewButton( m_enablePicking ? "Stop Picking Points" : "Start Picking Points", - [this]() - { - m_enablePicking = !m_enablePicking; - updateConnectedEditors(); - updateVisualization(); - } ); + uiOrdering.addNewButton( m_enablePicking ? "Stop Picking Points" : "Start Picking Points", [this]() { togglePicking(); } ); uiOrdering.add( &m_targets ); uiOrdering.add( &m_handleScalingFactor ); } diff --git a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonInView.h b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonInView.h index 64738607fa..81f9eee88e 100644 --- a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonInView.h +++ b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygonInView.h @@ -93,6 +93,7 @@ private: void updatePolygonFromTargets(); void connectSignals(); + void togglePicking(); private: caf::PdmPtrField m_polygon;