#7818 Modeled Well Path : Update location of completions

This commit is contained in:
Magne Sjaastad
2021-06-28 13:10:57 +02:00
parent 73f8046353
commit e06e0116d8
27 changed files with 184 additions and 17 deletions

View File

@@ -18,12 +18,15 @@
#include "RicCreateMultipleWellPathLaterals.h"
#include "RicNewWellPathLateralAtDepthFeature.h"
#include "RigWellPath.h"
#include "RimModeledWellPath.h"
#include "RimProject.h"
#include "RimTools.h"
#include "RimWellPathCollection.h"
#include "RimWellPathCompletions.h"
#include "RimWellPathGeometryDef.h"
#include "RimWellPathTarget.h"
#include "RimWellPathTieIn.h"
@@ -133,9 +136,12 @@ void RicCreateMultipleWellPathLaterals::slotAppendFractures()
RimModeledWellPath* sourceLateral = m_ui->sourceLateral();
if ( !sourceLateral ) return;
if ( !sourceLateral->wellPathTieIn()->parentWell() ) return;
auto parentWellPath = sourceLateral->wellPathTieIn()->parentWell();
if ( !parentWellPath ) return;
auto sourceLocationOfFirstWellTarget = sourceLateral->geometryDefinition()->firstActiveTarget()->targetPointXYZ();
auto sourceTieInMeasuredDepth = sourceLateral->wellPathTieIn()->tieInMeasuredDepth();
RimWellPathCollection* wellPathCollection = RimTools::wellPathCollection();
if ( wellPathCollection )
@@ -146,8 +152,10 @@ void RicCreateMultipleWellPathLaterals::slotAppendFractures()
RimModeledWellPath* newModeledWellPath = dynamic_cast<RimModeledWellPath*>(
sourceLateral->xmlCapability()->copyByXmlSerialization( caf::PdmDefaultObjectFactory::instance() ) );
QString name = sourceLateral->name() + QString( " (# %1)" ).arg( index++ );
newModeledWellPath->setName( name );
auto nameOfNewWell =
RicNewWellPathLateralAtDepthFeature::updateNameOfParentAndFindNameOfSideStep( parentWellPath );
newModeledWellPath->setName( nameOfNewWell );
newModeledWellPath->wellPathTieIn()->setTieInMeasuredDepth( measuredDepth );
wellPathCollection->addWellPath( newModeledWellPath, false );
@@ -156,12 +164,16 @@ void RicCreateMultipleWellPathLaterals::slotAppendFractures()
newModeledWellPath->updateReferencePoint();
updateLocationOfTargets( newModeledWellPath, sourceLocationOfFirstWellTarget );
updateLocationOfCompletions( newModeledWellPath, sourceTieInMeasuredDepth );
newModeledWellPath->updateWellPathVisualization();
}
wellPathCollection->rebuildWellPathNodes();
wellPathCollection->uiCapability()->updateConnectedEditors();
Riu3DMainWindowTools::selectAsCurrentItem( sourceLateral );
RimProject::current()->scheduleCreateDisplayModelAndRedrawAllViews();
m_ui->updateConnectedEditors();
@@ -191,3 +203,18 @@ void RicCreateMultipleWellPathLaterals::updateLocationOfTargets( RimModeledWellP
wellTarget->setPointXYZ( newTargetLocationXYZ );
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RicCreateMultipleWellPathLaterals::updateLocationOfCompletions( RimModeledWellPath* newModeledWellPath,
const double sourceTieInMeasuredDepth )
{
auto tieInMeasuredDepth = newModeledWellPath->wellPathTieIn()->tieInMeasuredDepth();
auto diffMD = tieInMeasuredDepth - sourceTieInMeasuredDepth;
for ( auto completion : newModeledWellPath->completions()->allCompletionsNoConst() )
{
completion->applyOffset( diffMD );
}
}