Add optional surface intersection lines onto seismic geometry

This commit is contained in:
Magne Sjaastad
2023-08-30 10:56:11 +02:00
parent fb75d0471e
commit 6a8b15daa8
4 changed files with 170 additions and 8 deletions

View File

@@ -27,6 +27,9 @@
#include "RimSeismicData.h"
#include "RimSeismicDataCollection.h"
#include "RimSeismicSection.h"
#include "RimSurface.h"
#include "RimSurfaceCollection.h"
#include "RimTools.h"
#include "RivSeismicSectionPartMgr.h"
@@ -34,6 +37,7 @@
#include "cvfModelBasicList.h"
#include "cafDisplayCoordTransform.h"
#include "cafPdmUiTreeSelectionEditor.h"
CAF_PDM_SOURCE_INIT( RimSeismicSectionCollection, "SeismicSectionCollection" );
@@ -49,6 +53,11 @@ RimSeismicSectionCollection::RimSeismicSectionCollection()
CAF_PDM_InitFieldNoDefault( &m_seismicSections, "SeismicSections", "SeismicSections" );
m_seismicSections.uiCapability()->setUiTreeHidden( true );
CAF_PDM_InitField( &m_surfaceIntersectionLinesScaleFactor, "SurfaceIntersectionLinesScaleFactor", 5.0, "Line Scale Factor ( >= 1.0 )" );
CAF_PDM_InitFieldNoDefault( &m_visibleSurfaceLines, "VisibleSurfaceLines", "Visible Surface Lines" );
m_visibleSurfaceLines.uiCapability()->setUiEditorTypeName( caf::PdmUiTreeSelectionEditor::uiEditorTypeName() );
setName( "Seismic Sections" );
}
@@ -137,6 +146,9 @@ caf::PdmFieldHandle* RimSeismicSectionCollection::userDescriptionField()
//--------------------------------------------------------------------------------------------------
void RimSeismicSectionCollection::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering )
{
uiOrdering.add( &m_surfaceIntersectionLinesScaleFactor );
uiOrdering.add( &m_visibleSurfaceLines );
uiOrdering.skipRemainingFields( true );
}
@@ -165,6 +177,14 @@ void RimSeismicSectionCollection::appendPartsToModel( Rim3dView*
if ( section->seismicData() != nullptr )
{
section->partMgr()->appendGeometryPartsToModel( model, transform, boundingBox );
std::vector<RimSurface*> surfaces;
for ( const auto& surf : m_visibleSurfaceLines.value() )
{
surfaces.push_back( surf );
}
section->partMgr()->appendSurfaceIntersectionLines( model, transform, m_surfaceIntersectionLinesScaleFactor(), surfaces );
}
section->partMgr()->appendPolylinePartsToModel( view, model, transform, boundingBox );
}
@@ -178,10 +198,12 @@ void RimSeismicSectionCollection::appendPartsToModel( Rim3dView*
//--------------------------------------------------------------------------------------------------
void RimSeismicSectionCollection::fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue )
{
if ( changedField == objectToggleField() )
if ( changedField == &m_surfaceIntersectionLinesScaleFactor )
{
updateView();
m_surfaceIntersectionLinesScaleFactor = std::max( 1.0, m_surfaceIntersectionLinesScaleFactor() );
}
updateView();
}
//--------------------------------------------------------------------------------------------------
@@ -240,6 +262,25 @@ void RimSeismicSectionCollection::updateLegendRangesTextAndVisibility( RiuViewer
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QList<caf::PdmOptionItemInfo> RimSeismicSectionCollection::calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions )
{
QList<caf::PdmOptionItemInfo> options;
if ( fieldNeedingOptions == &m_visibleSurfaceLines )
{
auto surfaceCollection = RimTools::surfaceCollection();
for ( auto surface : surfaceCollection->surfaces() )
{
options.push_back( caf::PdmOptionItemInfo( surface->fullName(), surface ) );
}
}
return options;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------

View File

@@ -22,6 +22,7 @@
#include "RimCheckableNamedObject.h"
#include "cafPdmChildArrayField.h"
#include "cafPdmPtrArrayField.h"
#include <vector>
@@ -29,6 +30,7 @@ class RimRegularLegendConfig;
class RimSeismicSection;
class Rim3dView;
class RiuViewer;
class RimSurface;
namespace cvf
{
@@ -75,6 +77,7 @@ protected:
void defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering ) override;
void fieldChangedByUi( const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue ) override;
QList<caf::PdmOptionItemInfo> calculateValueOptions( const caf::PdmFieldHandle* fieldNeedingOptions ) override;
void onChildDeleted( caf::PdmChildArrayFieldHandle* childArray, std::vector<caf::PdmObjectHandle*>& referringObjects ) override;
@@ -83,4 +86,7 @@ protected:
private:
caf::PdmField<QString> m_userDescription;
caf::PdmChildArrayField<RimSeismicSection*> m_seismicSections;
caf::PdmField<double> m_surfaceIntersectionLinesScaleFactor;
caf::PdmPtrArrayField<RimSurface*> m_visibleSurfaceLines;
};