mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#5458 Add support for air gap and start at surface for modeled well paths
This commit is contained in:
parent
5fb89f535b
commit
610a315e14
@ -80,7 +80,14 @@ void RicExportSelectedWellPathsFeature::writeWellPathGeometryToStream( QTextStre
|
|||||||
if ( modeledWellPath )
|
if ( modeledWellPath )
|
||||||
{
|
{
|
||||||
useMdRkb = true;
|
useMdRkb = true;
|
||||||
rkb = modeledWellPath->geometryDefinition()->mdrkbAtFirstTarget();
|
if ( modeledWellPath->geometryDefinition()->airGap() != 0.0 )
|
||||||
|
{
|
||||||
|
rkb = modeledWellPath->geometryDefinition()->airGap();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rkb = modeledWellPath->geometryDefinition()->mdrkbAtFirstTarget();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -80,9 +80,13 @@ RimWellPath::RimWellPath()
|
|||||||
m_name.uiCapability()->setUiHidden( true );
|
m_name.uiCapability()->setUiHidden( true );
|
||||||
m_name.xmlCapability()->disableIO();
|
m_name.xmlCapability()->disableIO();
|
||||||
|
|
||||||
|
CAF_PDM_InitFieldNoDefault( &m_airGap, "AirGap", "Air Gap", "", "", "" );
|
||||||
|
m_airGap.registerGetMethod( this, &RimWellPath::airGap );
|
||||||
|
m_airGap.uiCapability()->setUiReadOnly( true );
|
||||||
|
|
||||||
CAF_PDM_InitFieldNoDefault( &m_datumElevation, "DatumElevation", "Datum Elevation", "", "", "" );
|
CAF_PDM_InitFieldNoDefault( &m_datumElevation, "DatumElevation", "Datum Elevation", "", "", "" );
|
||||||
|
m_datumElevation.registerGetMethod( this, &RimWellPath::datumElevation );
|
||||||
m_datumElevation.uiCapability()->setUiReadOnly( true );
|
m_datumElevation.uiCapability()->setUiReadOnly( true );
|
||||||
m_datumElevation.xmlCapability()->disableIO();
|
|
||||||
|
|
||||||
CAF_PDM_InitFieldNoDefault( &m_unitSystem, "UnitSystem", "Unit System", "", "", "" );
|
CAF_PDM_InitFieldNoDefault( &m_unitSystem, "UnitSystem", "Unit System", "", "", "" );
|
||||||
m_unitSystem.uiCapability()->setUiReadOnly( true );
|
m_unitSystem.uiCapability()->setUiReadOnly( true );
|
||||||
@ -565,18 +569,16 @@ void RimWellPath::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& ui
|
|||||||
|
|
||||||
caf::PdmUiGroup* ssihubGroup = uiOrdering.addNewGroup( "Well Info" );
|
caf::PdmUiGroup* ssihubGroup = uiOrdering.addNewGroup( "Well Info" );
|
||||||
|
|
||||||
ssihubGroup->add( &m_datumElevation );
|
if ( m_wellPath.notNull() && m_wellPath->rkbDiff() > 0.0 )
|
||||||
ssihubGroup->add( &m_unitSystem );
|
{
|
||||||
|
ssihubGroup->add( &m_airGap );
|
||||||
|
}
|
||||||
|
|
||||||
if ( m_wellPath.notNull() && m_wellPath->hasDatumElevation() )
|
if ( m_wellPath.notNull() && m_wellPath->hasDatumElevation() )
|
||||||
{
|
{
|
||||||
m_datumElevation = m_wellPath->datumElevation();
|
ssihubGroup->add( &m_datumElevation );
|
||||||
m_datumElevation.uiCapability()->setUiHidden( false );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_datumElevation.uiCapability()->setUiHidden( true );
|
|
||||||
}
|
}
|
||||||
|
ssihubGroup->add( &m_unitSystem );
|
||||||
|
|
||||||
caf::PdmUiGroup* formationFileInfoGroup = uiOrdering.addNewGroup( "Well Picks" );
|
caf::PdmUiGroup* formationFileInfoGroup = uiOrdering.addNewGroup( "Well Picks" );
|
||||||
formationFileInfoGroup->add( &m_wellPathFormationFilePath );
|
formationFileInfoGroup->add( &m_wellPathFormationFilePath );
|
||||||
@ -672,6 +674,30 @@ RiaEclipseUnitTools::UnitSystem RimWellPath::unitSystem() const
|
|||||||
return m_unitSystem();
|
return m_unitSystem();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
double RimWellPath::airGap() const
|
||||||
|
{
|
||||||
|
if ( m_wellPath.notNull() && m_wellPath->rkbDiff() > 0.0 )
|
||||||
|
{
|
||||||
|
return m_wellPath->rkbDiff();
|
||||||
|
}
|
||||||
|
return 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
double RimWellPath::datumElevation() const
|
||||||
|
{
|
||||||
|
if ( m_wellPath.notNull() && m_wellPath->hasDatumElevation() )
|
||||||
|
{
|
||||||
|
return m_wellPath->datumElevation();
|
||||||
|
}
|
||||||
|
return 0.0;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
#include "cafPdmField.h"
|
#include "cafPdmField.h"
|
||||||
#include "cafPdmObject.h"
|
#include "cafPdmObject.h"
|
||||||
#include "cafPdmPointer.h"
|
#include "cafPdmPointer.h"
|
||||||
|
#include "cafPdmProxyValueField.h"
|
||||||
|
|
||||||
// Include to make Pdm work for cvf::Color
|
// Include to make Pdm work for cvf::Color
|
||||||
#include "cafPdmFieldCvfColor.h"
|
#include "cafPdmFieldCvfColor.h"
|
||||||
@ -84,6 +85,9 @@ public:
|
|||||||
void setUnitSystem( RiaEclipseUnitTools::UnitSystem unitSystem );
|
void setUnitSystem( RiaEclipseUnitTools::UnitSystem unitSystem );
|
||||||
RiaEclipseUnitTools::UnitSystem unitSystem() const;
|
RiaEclipseUnitTools::UnitSystem unitSystem() const;
|
||||||
|
|
||||||
|
double airGap() const;
|
||||||
|
double datumElevation() const;
|
||||||
|
|
||||||
RigWellPath* wellPathGeometry();
|
RigWellPath* wellPathGeometry();
|
||||||
const RigWellPath* wellPathGeometry() const;
|
const RigWellPath* wellPathGeometry() const;
|
||||||
|
|
||||||
@ -150,8 +154,9 @@ protected:
|
|||||||
|
|
||||||
// Fields
|
// Fields
|
||||||
protected:
|
protected:
|
||||||
caf::PdmField<double> m_datumElevation;
|
caf::PdmProxyValueField<double> m_airGap;
|
||||||
caf::PdmField<QString> m_name;
|
caf::PdmProxyValueField<double> m_datumElevation;
|
||||||
|
caf::PdmField<QString> m_name;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
caf::PdmField<QString> m_simWellName;
|
caf::PdmField<QString> m_simWellName;
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
#include "RiuViewerCommands.h"
|
#include "RiuViewerCommands.h"
|
||||||
|
|
||||||
#include "cafCmdFeatureMenuBuilder.h"
|
#include "cafCmdFeatureMenuBuilder.h"
|
||||||
|
#include "cafPdmUiDoubleValueEditor.h"
|
||||||
#include "cafPdmUiLineEditor.h"
|
#include "cafPdmUiLineEditor.h"
|
||||||
#include "cafPdmUiPushButtonEditor.h"
|
#include "cafPdmUiPushButtonEditor.h"
|
||||||
#include "cafPdmUiTableViewEditor.h"
|
#include "cafPdmUiTableViewEditor.h"
|
||||||
@ -52,7 +53,7 @@ void caf::AppEnum<RimWellPathGeometryDef::WellStartType>::setUp()
|
|||||||
addItem( RimWellPathGeometryDef::START_FROM_OTHER_WELL, "START_FROM_OTHER_WELL", "Branch" );
|
addItem( RimWellPathGeometryDef::START_FROM_OTHER_WELL, "START_FROM_OTHER_WELL", "Branch" );
|
||||||
addItem( RimWellPathGeometryDef::START_AT_AUTO_SURFACE, "START_AT_AUTO_SURFACE", "Auto Surface" );
|
addItem( RimWellPathGeometryDef::START_AT_AUTO_SURFACE, "START_AT_AUTO_SURFACE", "Auto Surface" );
|
||||||
|
|
||||||
setDefault( RimWellPathGeometryDef::START_AT_FIRST_TARGET );
|
setDefault( RimWellPathGeometryDef::START_AT_SURFACE );
|
||||||
}
|
}
|
||||||
} // namespace caf
|
} // namespace caf
|
||||||
|
|
||||||
@ -75,8 +76,9 @@ RimWellPathGeometryDef::RimWellPathGeometryDef()
|
|||||||
"",
|
"",
|
||||||
"" );
|
"" );
|
||||||
|
|
||||||
CAF_PDM_InitField( &m_mdrkbAtFirstTarget, "MdrkbAtFirstTarget", 0.0, "MDRKB at First Target", "", "", "" );
|
CAF_PDM_InitField( &m_airGap, "AirGap", 0.0, "Air Gap", "", "", "" );
|
||||||
|
m_airGap.uiCapability()->setUiEditorTypeName( caf::PdmUiDoubleValueEditor::uiEditorTypeName() );
|
||||||
|
CAF_PDM_InitField( &m_mdAtFirstTarget, "MdAtFirstTarget", 0.0, "MD at First Target", "", "", "" );
|
||||||
CAF_PDM_InitFieldNoDefault( &m_wellTargets, "WellPathTargets", "Well Targets", "", "", "" );
|
CAF_PDM_InitFieldNoDefault( &m_wellTargets, "WellPathTargets", "Well Targets", "", "", "" );
|
||||||
m_wellTargets.uiCapability()->setUiEditorTypeName( caf::PdmUiTableViewEditor::uiEditorTypeName() );
|
m_wellTargets.uiCapability()->setUiEditorTypeName( caf::PdmUiTableViewEditor::uiEditorTypeName() );
|
||||||
// m_wellTargets.uiCapability()->setUiTreeHidden(true);
|
// m_wellTargets.uiCapability()->setUiTreeHidden(true);
|
||||||
@ -97,14 +99,12 @@ RimWellPathGeometryDef::RimWellPathGeometryDef()
|
|||||||
"" );
|
"" );
|
||||||
RiaFieldhandleTools::disableWriteAndSetFieldHidden( &m_referencePointXyz_OBSOLETE );
|
RiaFieldhandleTools::disableWriteAndSetFieldHidden( &m_referencePointXyz_OBSOLETE );
|
||||||
|
|
||||||
/// To be removed ?
|
|
||||||
|
|
||||||
CAF_PDM_InitFieldNoDefault( &m_wellStartType, "WellStartType", "Start Type", "", "", "" );
|
CAF_PDM_InitFieldNoDefault( &m_wellStartType, "WellStartType", "Start Type", "", "", "" );
|
||||||
m_wellStartType.xmlCapability()->disableIO();
|
m_wellStartType.xmlCapability()->disableIO();
|
||||||
|
|
||||||
|
/// To be removed ?
|
||||||
CAF_PDM_InitFieldNoDefault( &m_parentWell, "ParentWell", "Parent Well", "", "", "" );
|
CAF_PDM_InitFieldNoDefault( &m_parentWell, "ParentWell", "Parent Well", "", "", "" );
|
||||||
m_parentWell.xmlCapability()->disableIO();
|
m_parentWell.xmlCapability()->disableIO();
|
||||||
CAF_PDM_InitField( &m_kickoffDepthOrMD, "KickoffDepthOrMD", 100.0, "Kickoff Depth", "", "", "" );
|
|
||||||
m_kickoffDepthOrMD.xmlCapability()->disableIO();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -132,12 +132,28 @@ void RimWellPathGeometryDef::setReferencePointXyz( const cvf::Vec3d& refPointXyz
|
|||||||
m_referencePointUtmXyd = xyd;
|
m_referencePointUtmXyd = xyd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
double RimWellPathGeometryDef::airGap() const
|
||||||
|
{
|
||||||
|
return m_airGap;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RimWellPathGeometryDef::setAirGap( double airGap )
|
||||||
|
{
|
||||||
|
m_airGap = airGap;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
double RimWellPathGeometryDef::mdrkbAtFirstTarget() const
|
double RimWellPathGeometryDef::mdrkbAtFirstTarget() const
|
||||||
{
|
{
|
||||||
return m_mdrkbAtFirstTarget;
|
return m_mdAtFirstTarget;
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -145,7 +161,7 @@ double RimWellPathGeometryDef::mdrkbAtFirstTarget() const
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
void RimWellPathGeometryDef::setMdrkbAtFirstTarget( double mdrkb )
|
void RimWellPathGeometryDef::setMdrkbAtFirstTarget( double mdrkb )
|
||||||
{
|
{
|
||||||
m_mdrkbAtFirstTarget = mdrkb;
|
m_mdAtFirstTarget = mdrkb;
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -166,6 +182,37 @@ cvf::ref<RigWellPath> RimWellPathGeometryDef::createWellPathGeometry()
|
|||||||
&( wellPathGeometry->m_wellPathPoints ),
|
&( wellPathGeometry->m_wellPathPoints ),
|
||||||
&( wellPathGeometry->m_measuredDepths ) );
|
&( wellPathGeometry->m_measuredDepths ) );
|
||||||
|
|
||||||
|
if ( m_airGap != 0.0 )
|
||||||
|
{
|
||||||
|
wellPathGeometry->setDatumElevation( m_airGap );
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( m_wellStartType == START_AT_SURFACE && !wellPathGeometry->m_wellPathPoints.empty() )
|
||||||
|
{
|
||||||
|
cvf::Vec3d mslPoint = wellPathGeometry->m_wellPathPoints.front();
|
||||||
|
mslPoint.z() = 0.0;
|
||||||
|
double depthDiff = mslPoint.z() - wellPathGeometry->m_wellPathPoints.front().z();
|
||||||
|
if ( std::abs( depthDiff ) > 1.0e-8 )
|
||||||
|
{
|
||||||
|
CAF_ASSERT( wellPathGeometry->m_wellPathPoints.size() == wellPathGeometry->m_measuredDepths.size() );
|
||||||
|
|
||||||
|
std::vector<cvf::Vec3d> newPoints;
|
||||||
|
newPoints.reserve( wellPathGeometry->m_wellPathPoints.size() + 1 );
|
||||||
|
std::vector<double> newMds;
|
||||||
|
newMds.reserve( wellPathGeometry->m_measuredDepths.size() + 1 );
|
||||||
|
|
||||||
|
newPoints.push_back( mslPoint );
|
||||||
|
newMds.push_back( 0.0 );
|
||||||
|
for ( size_t i = 0; i < wellPathGeometry->m_wellPathPoints.size(); ++i )
|
||||||
|
{
|
||||||
|
newPoints.push_back( wellPathGeometry->m_wellPathPoints[i] );
|
||||||
|
newMds.push_back( wellPathGeometry->m_measuredDepths[i] + depthDiff );
|
||||||
|
}
|
||||||
|
wellPathGeometry->m_wellPathPoints.swap( newPoints );
|
||||||
|
wellPathGeometry->m_measuredDepths.swap( newMds );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return wellPathGeometry;
|
return wellPathGeometry;
|
||||||
}
|
}
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -312,6 +359,8 @@ QList<caf::PdmOptionItemInfo>
|
|||||||
|
|
||||||
if ( fieldNeedingOptions == &m_wellStartType )
|
if ( fieldNeedingOptions == &m_wellStartType )
|
||||||
{
|
{
|
||||||
|
options.push_back( caf::PdmOptionItemInfo( "Start at Surface", RimWellPathGeometryDef::START_AT_SURFACE ) );
|
||||||
|
|
||||||
options.push_back(
|
options.push_back(
|
||||||
caf::PdmOptionItemInfo( "Start at First Target", RimWellPathGeometryDef::START_AT_FIRST_TARGET ) );
|
caf::PdmOptionItemInfo( "Start at First Target", RimWellPathGeometryDef::START_AT_FIRST_TARGET ) );
|
||||||
}
|
}
|
||||||
@ -344,21 +393,12 @@ void RimWellPathGeometryDef::fieldChangedByUi( const caf::PdmFieldHandle* change
|
|||||||
void RimWellPathGeometryDef::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering )
|
void RimWellPathGeometryDef::defineUiOrdering( QString uiConfigName, caf::PdmUiOrdering& uiOrdering )
|
||||||
{
|
{
|
||||||
uiOrdering.add( &m_wellStartType );
|
uiOrdering.add( &m_wellStartType );
|
||||||
if ( m_wellStartType == START_FROM_OTHER_WELL )
|
|
||||||
{
|
|
||||||
uiOrdering.add( &m_parentWell );
|
|
||||||
m_kickoffDepthOrMD.uiCapability()->setUiName( "Measured Depth" );
|
|
||||||
uiOrdering.add( &m_kickoffDepthOrMD );
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( m_wellStartType == START_AT_SURFACE )
|
|
||||||
{
|
|
||||||
m_kickoffDepthOrMD.uiCapability()->setUiName( "Kick-Off Depth" );
|
|
||||||
uiOrdering.add( &m_kickoffDepthOrMD );
|
|
||||||
}
|
|
||||||
|
|
||||||
uiOrdering.add( &m_referencePointUtmXyd );
|
uiOrdering.add( &m_referencePointUtmXyd );
|
||||||
uiOrdering.add( &m_mdrkbAtFirstTarget );
|
uiOrdering.add( &m_airGap );
|
||||||
|
if ( m_wellStartType == START_AT_FIRST_TARGET )
|
||||||
|
{
|
||||||
|
uiOrdering.add( &m_mdAtFirstTarget );
|
||||||
|
}
|
||||||
uiOrdering.add( &m_wellTargets );
|
uiOrdering.add( &m_wellTargets );
|
||||||
uiOrdering.add( &m_pickPointsEnabled );
|
uiOrdering.add( &m_pickPointsEnabled );
|
||||||
uiOrdering.skipRemainingFields( true );
|
uiOrdering.skipRemainingFields( true );
|
||||||
@ -500,6 +540,16 @@ void RimWellPathGeometryDef::defineEditorAttribute( const caf::PdmFieldHandle* f
|
|||||||
QString::number( m_referencePointUtmXyd()[2], 'f', 2 );
|
QString::number( m_referencePointUtmXyd()[2], 'f', 2 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ( field == &m_airGap )
|
||||||
|
{
|
||||||
|
auto uiDoubleValueEditorAttr = dynamic_cast<caf::PdmUiDoubleValueEditorAttribute*>( attribute );
|
||||||
|
if ( uiDoubleValueEditorAttr )
|
||||||
|
{
|
||||||
|
uiDoubleValueEditorAttr->m_decimals = 2;
|
||||||
|
uiDoubleValueEditorAttr->m_validator = new QDoubleValidator( 0.0, std::numeric_limits<double>::max(), 2 );
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -52,6 +52,8 @@ public:
|
|||||||
cvf::Vec3d referencePointXyz() const;
|
cvf::Vec3d referencePointXyz() const;
|
||||||
void setReferencePointXyz( const cvf::Vec3d& refPointXyz );
|
void setReferencePointXyz( const cvf::Vec3d& refPointXyz );
|
||||||
|
|
||||||
|
double airGap() const;
|
||||||
|
void setAirGap( double airGap );
|
||||||
double mdrkbAtFirstTarget() const;
|
double mdrkbAtFirstTarget() const;
|
||||||
void setMdrkbAtFirstTarget( double mdrkb );
|
void setMdrkbAtFirstTarget( double mdrkb );
|
||||||
|
|
||||||
@ -100,16 +102,16 @@ private:
|
|||||||
caf::PdmField<cvf::Vec3d> m_referencePointUtmXyd;
|
caf::PdmField<cvf::Vec3d> m_referencePointUtmXyd;
|
||||||
caf::PdmField<cvf::Vec3d> m_referencePointXyz_OBSOLETE;
|
caf::PdmField<cvf::Vec3d> m_referencePointXyz_OBSOLETE;
|
||||||
|
|
||||||
caf::PdmField<double> m_mdrkbAtFirstTarget;
|
caf::PdmField<double> m_airGap;
|
||||||
|
|
||||||
|
caf::PdmField<double> m_mdAtFirstTarget;
|
||||||
caf::PdmChildArrayField<RimWellPathTarget*> m_wellTargets;
|
caf::PdmChildArrayField<RimWellPathTarget*> m_wellTargets;
|
||||||
|
|
||||||
caf::PdmField<bool> m_pickPointsEnabled;
|
caf::PdmField<bool> m_pickPointsEnabled;
|
||||||
|
|
||||||
// TODO: Unused for now. Remove when dust settles
|
|
||||||
|
|
||||||
caf::PdmField<caf::AppEnum<WellStartType>> m_wellStartType;
|
caf::PdmField<caf::AppEnum<WellStartType>> m_wellStartType;
|
||||||
caf::PdmField<double> m_kickoffDepthOrMD;
|
// TODO: Unused for now. Remove when dust settles
|
||||||
caf::PdmPtrField<RimWellPath*> m_parentWell;
|
caf::PdmPtrField<RimWellPath*> m_parentWell;
|
||||||
|
|
||||||
std::shared_ptr<RicCreateWellTargetsPickEventHandler> m_pickTargetsEventHandler;
|
std::shared_ptr<RicCreateWellTargetsPickEventHandler> m_pickTargetsEventHandler;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user