mirror of
https://github.com/OPM/ResInsight.git
synced 2026-10-24 22:27:55 -05:00
Refactor MSW segment model to support more detailed fields
Refactored RimMswSegment to store join segment, length, depth, and next segment length
This commit is contained in:
1 parent
e6e6d5b818
commit
e8bab38b49
5 files changed
+86
-32
No files matched your search
@@ -668,8 +668,7 @@ void RivWellPathPartMgr::appendMswSegmentsToModel( cvf::ModelBasicList*
|
||||
cvf::ref<RivObjectSourceInfo> objectSourceInfo = new RivObjectSourceInfo( const_cast<RimMswSegment*>( segment ) );
|
||||
for ( auto part : parts )
|
||||
{
|
||||
part->setName(
|
||||
QString( "MSW Segment %1 (Branch %2)" ).arg( segment->segmentNumber() ).arg( segment->branchNumber() ).toStdString() );
|
||||
part->setName( m_rimWellPath->name().toStdString() );
|
||||
part->setSourceInfo( objectSourceInfo.p() );
|
||||
model->addPart( part.p() );
|
||||
}
|
||||
|
||||
@@ -35,11 +35,17 @@ RimMswSegment::RimMswSegment()
|
||||
CAF_PDM_InitFieldNoDefault( &m_branchNumber, "BranchNumber", "Branch Number" );
|
||||
m_branchNumber.uiCapability()->setUiReadOnly( true );
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_startMD, "StartMD", "Start MD" );
|
||||
m_startMD.uiCapability()->setUiReadOnly( true );
|
||||
CAF_PDM_InitFieldNoDefault( &m_joinSegment, "JoinSegment", "Join Segment" );
|
||||
m_joinSegment.uiCapability()->setUiReadOnly( true );
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_endMD, "EndMD", "End MD" );
|
||||
m_endMD.uiCapability()->setUiReadOnly( true );
|
||||
CAF_PDM_InitFieldNoDefault( &m_length, "Length", "Length" );
|
||||
m_length.uiCapability()->setUiReadOnly( true );
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_depth, "Depth", "Depth" );
|
||||
m_depth.uiCapability()->setUiReadOnly( true );
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_nextSegmentLength, "NextSegmentLength", "Next Segment Length" );
|
||||
m_nextSegmentLength.uiCapability()->setUiReadOnly( true );
|
||||
|
||||
CAF_PDM_InitFieldNoDefault( &m_diameter, "Diameter", "Diameter" );
|
||||
m_diameter.uiCapability()->setUiReadOnly( true );
|
||||
@@ -57,13 +63,21 @@ RimMswSegment::~RimMswSegment()
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimMswSegment::setSegmentData( int segmentNumber, int branchNumber, double startMD, double endMD, double diameter )
|
||||
void RimMswSegment::setSegmentData( int segmentNumber,
|
||||
int branchNumber,
|
||||
int joinSegment,
|
||||
double length,
|
||||
double depth,
|
||||
double nextSegmentLength,
|
||||
double diameter )
|
||||
{
|
||||
m_segmentNumber = segmentNumber;
|
||||
m_branchNumber = branchNumber;
|
||||
m_startMD = startMD;
|
||||
m_endMD = endMD;
|
||||
m_diameter = diameter;
|
||||
m_segmentNumber = segmentNumber;
|
||||
m_branchNumber = branchNumber;
|
||||
m_joinSegment = joinSegment;
|
||||
m_length = length;
|
||||
m_depth = depth;
|
||||
m_nextSegmentLength = nextSegmentLength;
|
||||
m_diameter = diameter;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -82,6 +96,38 @@ int RimMswSegment::branchNumber() const
|
||||
return m_branchNumber;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
int RimMswSegment::joinSegment() const
|
||||
{
|
||||
return m_joinSegment;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
double RimMswSegment::length() const
|
||||
{
|
||||
return m_length;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
double RimMswSegment::depth() const
|
||||
{
|
||||
return m_depth;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
double RimMswSegment::nextSegmentLength() const
|
||||
{
|
||||
return m_nextSegmentLength;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
///
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -140,7 +186,7 @@ cvf::Color3f RimMswSegment::defaultComponentColor() const
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
double RimMswSegment::startMD() const
|
||||
{
|
||||
return m_startMD;
|
||||
return m_length;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -148,7 +194,7 @@ double RimMswSegment::startMD() const
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
double RimMswSegment::endMD() const
|
||||
{
|
||||
return m_endMD;
|
||||
return m_nextSegmentLength;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -156,8 +202,8 @@ double RimMswSegment::endMD() const
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
void RimMswSegment::applyOffset( double offsetMD )
|
||||
{
|
||||
m_startMD = m_startMD + offsetMD;
|
||||
m_endMD = m_endMD + offsetMD;
|
||||
// This does not make sense to apply offset to MSW segments, as they are not connected to each other and the start/end MD is only used
|
||||
// for display purposes. So we do nothing here.
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------
|
||||
@@ -167,8 +213,10 @@ void RimMswSegment::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering&
|
||||
{
|
||||
uiOrdering.add( &m_segmentNumber );
|
||||
uiOrdering.add( &m_branchNumber );
|
||||
uiOrdering.add( &m_startMD );
|
||||
uiOrdering.add( &m_endMD );
|
||||
uiOrdering.add( &m_length );
|
||||
uiOrdering.add( &m_depth );
|
||||
uiOrdering.add( &m_nextSegmentLength );
|
||||
uiOrdering.add( &m_joinSegment );
|
||||
uiOrdering.add( &m_diameter );
|
||||
|
||||
uiOrdering.skipRemainingFields( true );
|
||||
|
||||
@@ -37,10 +37,14 @@ public:
|
||||
RimMswSegment();
|
||||
~RimMswSegment() override;
|
||||
|
||||
void setSegmentData( int segmentNumber, int branchNumber, double startMD, double endMD, double diameter );
|
||||
void setSegmentData( int segmentNumber, int branchNumber, int joinSegment, double length, double depth, double nextSegmentLength, double diameter );
|
||||
|
||||
int segmentNumber() const;
|
||||
int branchNumber() const;
|
||||
int joinSegment() const;
|
||||
double length() const;
|
||||
double depth() const;
|
||||
double nextSegmentLength() const;
|
||||
double diameter() const;
|
||||
|
||||
// RimWellPathComponentInterface overrides
|
||||
@@ -59,7 +63,9 @@ protected:
|
||||
private:
|
||||
caf::PdmField<int> m_segmentNumber;
|
||||
caf::PdmField<int> m_branchNumber;
|
||||
caf::PdmField<double> m_startMD;
|
||||
caf::PdmField<double> m_endMD;
|
||||
caf::PdmField<int> m_joinSegment;
|
||||
caf::PdmField<double> m_length;
|
||||
caf::PdmField<double> m_depth;
|
||||
caf::PdmField<double> m_nextSegmentLength;
|
||||
caf::PdmField<double> m_diameter;
|
||||
};
|
||||
@@ -104,21 +104,17 @@ void RimMswSegmentCollection::populateFromWelsegsData( std::vector<WelsegsRow> w
|
||||
// Sort segments by measured depth (length)
|
||||
std::sort( welsegsData.begin(), welsegsData.end(), []( const WelsegsRow& a, const WelsegsRow& b ) { return a.length < b.length; } );
|
||||
|
||||
// Create segments with computed start/end MD
|
||||
// Assign segments data. Start/end measured depth is used for visualization in 2D plots by RimWellPathComponentInterface
|
||||
for ( size_t i = 0; i < welsegsData.size(); ++i )
|
||||
{
|
||||
const auto& row = welsegsData[i];
|
||||
|
||||
double startMD = row.length;
|
||||
double endMD = ( i + 1 < welsegsData.size() ) ? welsegsData[i + 1].length : wellTotalDepth;
|
||||
|
||||
// Skip if start >= end (invalid interval)
|
||||
if ( startMD >= endMD ) continue;
|
||||
double nextSegmentLength = ( i + 1 < welsegsData.size() ) ? welsegsData[i + 1].length : wellTotalDepth;
|
||||
|
||||
double diameter = row.diameter.value_or( 0.1 ); // Default diameter if not specified
|
||||
|
||||
auto* segment = new RimMswSegment();
|
||||
segment->setSegmentData( row.segment1, row.branch, startMD, endMD, diameter );
|
||||
segment->setSegmentData( row.segment1, row.branch, row.joinSegment, row.length, row.depth, nextSegmentLength, diameter );
|
||||
appendSegment( segment );
|
||||
}
|
||||
}
|
||||
|
||||
@@ -836,13 +836,18 @@ void RiuViewerCommands::handlePickAction( int winPosX, int winPosY, Qt::Keyboard
|
||||
resultInfoText += "\n\n";
|
||||
}
|
||||
|
||||
resultInfoText += QString( "Segment: %1\nBranch: %2\nMD: %3 - %4\nDiameter: %5" )
|
||||
resultInfoText += QString( "Segment : %1\n"
|
||||
"Branch : %2\n"
|
||||
"Join Segment: %3\n"
|
||||
"Length : %4\n"
|
||||
"Depth : %5\n"
|
||||
"Diameter : %6" )
|
||||
.arg( mswSegment->segmentNumber() )
|
||||
.arg( mswSegment->branchNumber() )
|
||||
.arg( mswSegment->startMD() )
|
||||
.arg( mswSegment->endMD() )
|
||||
.arg( mswSegment->joinSegment() )
|
||||
.arg( mswSegment->length() )
|
||||
.arg( mswSegment->depth() )
|
||||
.arg( mswSegment->diameter() );
|
||||
|
||||
RiuMainWindow::instance()->setResultInfo( resultInfoText );
|
||||
RiuMainWindow::instance()->selectAsCurrentItem( mswSegment, true );
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user