From 8f4008db0f5ec7c8f661d8cbb6b697d6d9980237 Mon Sep 17 00:00:00 2001 From: Kristian Bendiksen Date: Fri, 8 May 2026 10:24:18 +0200 Subject: [PATCH] #12106 Polygon: Show coordinates with positive depth in property panel Bind a PdmProxyValueField that inverts the Z sign to the Points group in RimPolygon's property panel, mirroring the pattern already used by RimExtrudedCurveIntersection. The raw m_pointsInDomainCoords field keeps its XYZ semantics, scriptable keyword, and serialization unchanged. Fixes #12106. --- .../ProjectDataModel/Polygons/RimPolygon.cpp | 29 +++++++++++++++++-- .../ProjectDataModel/Polygons/RimPolygon.h | 11 +++++-- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygon.cpp b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygon.cpp index 7f4b716e67..e323350fe5 100644 --- a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygon.cpp +++ b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygon.cpp @@ -20,6 +20,7 @@ #include "RiaApplication.h" #include "RiaColorTools.h" +#include "RiaVec3Tools.h" #include "RigPolyLinesData.h" @@ -50,6 +51,12 @@ RimPolygon::RimPolygon() CAF_PDM_InitField( &m_isReadOnly, "IsReadOnly", false, "Read Only" ); CAF_PDM_InitScriptableFieldWithScriptKeywordNoDefault( &m_pointsInDomainCoords, "PointsInDomainCoords", "Coordinates", "Points" ); + m_pointsInDomainCoords.uiCapability()->setUiHidden( true ); + + CAF_PDM_InitFieldNoDefault( &m_pointsInDomainCoordsForUi, "PointsInDomainCoordsUi", "Coordinates" ); + m_pointsInDomainCoordsForUi.registerSetMethod( this, &RimPolygon::setPointsInDomainCoordsFromXyd ); + m_pointsInDomainCoordsForUi.registerGetMethod( this, &RimPolygon::pointsInDomainCoordsXyd ); + m_pointsInDomainCoordsForUi.xmlCapability()->disableIO(); CAF_PDM_InitScriptableFieldNoDefault( &m_appearance, "Appearance", "Appearance" ); m_appearance = new RimPolygonAppearance; @@ -103,6 +110,22 @@ std::vector RimPolygon::pointsInDomainCoords() const return m_pointsInDomainCoords(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector RimPolygon::pointsInDomainCoordsXyd() const +{ + return RiaVec3Tools::invertZSign( m_pointsInDomainCoords() ); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimPolygon::setPointsInDomainCoordsFromXyd( const std::vector& pointsXyd ) +{ + m_pointsInDomainCoords = RiaVec3Tools::invertZSign( pointsXyd ); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -183,9 +206,9 @@ void RimPolygon::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiO auto groupPoints = uiOrdering.addNewGroup( "Points" ); groupPoints->setCollapsedByDefault(); - groupPoints->add( &m_pointsInDomainCoords ); + groupPoints->add( &m_pointsInDomainCoordsForUi ); - m_pointsInDomainCoords.uiCapability()->setUiReadOnly( m_isReadOnly() ); + m_pointsInDomainCoordsForUi.uiCapability()->setUiReadOnly( m_isReadOnly() ); auto group = uiOrdering.addNewGroup( "Appearance" ); m_appearance->uiOrdering( uiConfigName, *group ); @@ -196,7 +219,7 @@ void RimPolygon::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiO //-------------------------------------------------------------------------------------------------- void RimPolygon::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) { - if ( changedField == &m_pointsInDomainCoords ) + if ( changedField == &m_pointsInDomainCoords || changedField == &m_pointsInDomainCoordsForUi ) { coordinatesChanged.send(); } diff --git a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygon.h b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygon.h index f2e8bd5989..49781937be 100644 --- a/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygon.h +++ b/ApplicationLibCode/ProjectDataModel/Polygons/RimPolygon.h @@ -23,6 +23,7 @@ #include "cafPdmChildField.h" #include "cafPdmFieldCvfVec3d.h" +#include "cafPdmProxyValueField.h" #include "cvfColor3.h" #include "cvfVector3.h" @@ -74,8 +75,12 @@ private: void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override; void childFieldChangedByUi( const caf::PdmFieldHandle* changedChildField ) override; + std::vector pointsInDomainCoordsXyd() const; + void setPointsInDomainCoordsFromXyd( const std::vector& pointsXyd ); + private: - caf::PdmField m_isReadOnly; - caf::PdmField> m_pointsInDomainCoords; - caf::PdmChildField m_appearance; + caf::PdmField m_isReadOnly; + caf::PdmField> m_pointsInDomainCoords; + caf::PdmProxyValueField> m_pointsInDomainCoordsForUi; + caf::PdmChildField m_appearance; };