#14436 Surface intersection curves and bands for Intersection Box and I/J/K Intersection

* Add RivSurfaceIntersectionCurveTools for shared surface intersection curve geometry
* Move the surface intersection collection to RimIntersection
* Add surface curtain footprints for the box and i/j/k intersections
* Build surface intersection curves for the box and i/j/k intersections
* Follow the pillar tilt when projecting a surface onto an intersection
* Estimate the surface intersection by continuing the pillar past the curtain
This commit is contained in:
Magne Sjaastad authored and GitHub committed 2026-08-06 08:06:53 +02:00
1 parent d87a0d3048
commit 0012a65922
31 files changed
+1234 -398

No files matched your search

@@ -47,6 +47,7 @@
#include "RivExtrudedCurveIntersectionPartMgr.h"
#include "cafCmdFeatureMenuBuilder.h"
#include "cafPdmFieldScriptingCapability.h"
#include "cafPdmFieldScriptingCapabilityCvfVec3d.h"
#include "cafPdmObjectScriptingCapability.h"
@@ -253,10 +254,6 @@ RimExtrudedCurveIntersection::RimExtrudedCurveIntersection()
caf::PdmUiPushButtonEditor::configureEditorLabelLeft( &m_inputTwoAzimuthPointsFromViewerEnabled );
m_inputTwoAzimuthPointsFromViewerEnabled = false;
CAF_PDM_InitFieldNoDefault( &m_surfaceIntersections, "SurfaceIntersections", "Surface Intersections" );
m_surfaceIntersections = new RimSurfaceIntersectionCollection;
m_surfaceIntersections->objectChanged.connect( this, &RimExtrudedCurveIntersection::onSurfaceIntersectionsChanged );
CAF_PDM_InitField( &m_depthUpperThreshold, "UpperThreshold", -300000.0, "Upper Threshold" );
m_depthUpperThreshold.uiCapability()->setUiEditorTypeName( caf::PdmUiDoubleSliderEditor::uiEditorTypeName() );
@@ -731,19 +728,26 @@ QList<caf::PdmOptionItemInfo> RimExtrudedCurveIntersection::calculateValueOption
return options;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimExtrudedCurveIntersection::appendMenuItems( caf::CmdFeatureMenuBuilder& menuBuilder ) const
{
appendCommonMenuItems( menuBuilder );
menuBuilder << "RicSeismicSectionFromIntersectionFeature";
menuBuilder.addSeparator();
menuBuilder << "RicNewIntersectionViewFeature";
menuBuilder.addSeparator();
menuBuilder << "RicCopyIntersectionsToAllViewsInCaseFeature";
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimExtrudedCurveIntersection::defineUiTreeOrdering( caf::PdmUiTreeOrdering& uiTreeOrdering, QString uiConfigName )
{
for ( auto c : m_surfaceIntersections->surfaceIntersectionCurves() )
{
uiTreeOrdering.add( c );
}
for ( auto c : m_surfaceIntersections->surfaceIntersectionBands() )
{
uiTreeOrdering.add( c );
}
appendSurfaceIntersectionsToTreeOrdering( uiTreeOrdering );
uiTreeOrdering.skipRemainingChildren( true );
}
@@ -1298,33 +1302,24 @@ bool RimExtrudedCurveIntersection::showIntersectionGeometry() const
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
std::vector<RimSurfaceIntersectionCurve*> RimExtrudedCurveIntersection::surfaceIntersectionCurves() const
bool RimExtrudedCurveIntersection::supportsSurfaceIntersectionCurves() const
{
return m_surfaceIntersections->surfaceIntersectionCurves();
return true;
}
//--------------------------------------------------------------------------------------------------
///
/// The first polyline is used, as the surface intersection curve follows the same line as the
/// intersection geometry itself. The curtain is treated as a vertical extrusion, also when the
/// intersection has a tilted extrusion direction.
//--------------------------------------------------------------------------------------------------
std::vector<RimSurfaceIntersectionBand*> RimExtrudedCurveIntersection::surfaceIntersectionBands() const
RimIntersectionCurtain RimExtrudedCurveIntersection::surfaceCurtain() const
{
return m_surfaceIntersections->surfaceIntersectionBands();
}
auto lines = polyLines();
if ( lines.empty() ) return {};
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimSurfaceIntersectionCurve* RimExtrudedCurveIntersection::addIntersectionCurve()
{
return m_surfaceIntersections->addIntersectionCurve();
}
const double extent = defaultCurtainExtent();
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
RimSurfaceIntersectionBand* RimExtrudedCurveIntersection::addIntersectionBand()
{
return m_surfaceIntersections->addIntersectionBand();
return verticalCurtain( lines.front(), extent, -extent );
}
//--------------------------------------------------------------------------------------------------
@@ -1388,15 +1383,6 @@ void RimExtrudedCurveIntersection::appendOptionItemsForSources( int
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimExtrudedCurveIntersection::onSurfaceIntersectionsChanged( const caf::SignalEmitter* emitter )
{
updateAllRequiredEditors();
rebuildGeometryAndScheduleCreateDisplayModel();
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------