2015-11-18 09:15:13 +01:00
/////////////////////////////////////////////////////////////////////////////////
//
// Copyright (C) 2015- Statoil ASA
// Copyright (C) 2015- Ceetron Solutions AS
//
// ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// ResInsight is distributed in the hope that it will be useful, but WITHOUT ANY
// WARRANTY; without even the implied warranty of MERCHANTABILITY or
// FITNESS FOR A PARTICULAR PURPOSE.
//
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
// for more details.
//
/////////////////////////////////////////////////////////////////////////////////
2016-09-21 10:48:25 +02:00
# include "RimIntersection.h"
2015-11-18 09:15:13 +01:00
2015-11-18 12:16:04 +01:00
# include "RiaApplication.h"
2017-12-08 12:22:35 +01:00
# include "RigEclipseCaseData.h"
2017-02-24 14:31:06 +01:00
# include "RigWellPath.h"
2015-11-27 17:18:30 +01:00
# include "RimCase.h"
2017-12-08 12:22:35 +01:00
# include "RimEclipseCase.h"
2015-11-18 12:16:04 +01:00
# include "RimEclipseView.h"
# include "RimOilField.h"
# include "RimProject.h"
2017-10-13 09:29:42 +02:00
# include "RimSimWellInView.h"
2017-10-13 14:20:47 +02:00
# include "RimSimWellInViewCollection.h"
2017-01-05 07:53:14 +01:00
# include "RimTools.h"
2018-01-09 10:11:28 +01:00
# include "Rim3dView.h"
2015-11-18 12:16:04 +01:00
# include "RimWellPath.h"
2015-11-18 09:15:13 +01:00
2015-11-27 17:18:30 +01:00
# include "RiuViewer.h"
2016-09-21 10:32:29 +02:00
# include "RivIntersectionPartMgr.h"
2015-11-27 17:18:30 +01:00
# include "cafCmdFeature.h"
# include "cafCmdFeatureManager.h"
2017-11-21 13:43:22 +01:00
# include "cafPdmUiDoubleSliderEditor.h"
2015-11-30 15:12:00 +01:00
# include "cafPdmUiListEditor.h"
2015-11-27 17:18:30 +01:00
# include "cafPdmUiPushButtonEditor.h"
2015-11-18 09:15:13 +01:00
2017-01-17 15:11:02 +01:00
# include "cvfBoundingBox.h"
2017-11-21 13:43:22 +01:00
# include "cvfGeometryTools.h"
2017-02-24 11:07:15 +01:00
# include "cvfPlane.h"
2018-01-25 17:37:22 +01:00
# include "Rim2dIntersectionView.h"
2017-01-17 15:11:02 +01:00
2015-11-18 09:15:13 +01:00
namespace caf {
2015-11-18 10:06:42 +01:00
template < >
2016-09-21 10:48:25 +02:00
void caf : : AppEnum < RimIntersection : : CrossSectionEnum > : : setUp ( )
2015-11-18 10:06:42 +01:00
{
2016-09-21 10:48:25 +02:00
addItem ( RimIntersection : : CS_WELL_PATH , " CS_WELL_PATH " , " Well Path " ) ;
addItem ( RimIntersection : : CS_SIMULATION_WELL , " CS_SIMULATION_WELL " , " Simulation Well " ) ;
addItem ( RimIntersection : : CS_POLYLINE , " CS_POLYLINE " , " Polyline " ) ;
2017-11-21 18:57:33 +01:00
addItem ( RimIntersection : : CS_AZIMUTHLINE , " CS_AZIMUTHLINE " , " Azimuth and Dip " ) ;
2016-09-21 10:48:25 +02:00
setDefault ( RimIntersection : : CS_WELL_PATH ) ;
2015-11-18 10:06:42 +01:00
}
2015-11-18 09:15:13 +01:00
2015-11-18 15:55:05 +01:00
template < >
2016-09-21 10:48:25 +02:00
void caf : : AppEnum < RimIntersection : : CrossSectionDirEnum > : : setUp ( )
2015-11-18 15:55:05 +01:00
{
2017-11-21 13:43:22 +01:00
addItem ( RimIntersection : : CS_VERTICAL , " CS_VERTICAL " , " Vertical " ) ;
addItem ( RimIntersection : : CS_HORIZONTAL , " CS_HORIZONTAL " , " Horizontal " ) ;
2017-11-14 12:49:05 +01:00
addItem ( RimIntersection : : CS_TWO_POINTS , " CS_TWO_POINTS " , " Defined by Two Points " ) ;
2016-09-21 10:48:25 +02:00
setDefault ( RimIntersection : : CS_VERTICAL ) ;
2015-11-18 15:55:05 +01:00
}
2015-11-18 09:15:13 +01:00
}
2016-09-21 10:48:25 +02:00
CAF_PDM_SOURCE_INIT ( RimIntersection , " CrossSection " ) ;
2015-11-18 09:15:13 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2016-09-21 10:48:25 +02:00
RimIntersection : : RimIntersection ( )
2015-11-18 09:15:13 +01:00
{
2015-11-24 13:26:45 +01:00
CAF_PDM_InitObject ( " Intersection " , " :/CrossSection16x16.png " , " " , " " ) ;
2015-11-18 09:15:13 +01:00
2015-11-23 09:07:35 +01:00
CAF_PDM_InitField ( & name , " UserDescription " , QString ( " Intersection Name " ) , " Name " , " " , " " , " " ) ;
2015-11-18 09:15:13 +01:00
CAF_PDM_InitField ( & isActive , " Active " , true , " Active " , " " , " " , " " ) ;
isActive . uiCapability ( ) - > setUiHidden ( true ) ;
2015-11-26 15:59:02 +01:00
CAF_PDM_InitFieldNoDefault ( & type , " Type " , " Type " , " " , " " , " " ) ;
CAF_PDM_InitFieldNoDefault ( & direction , " Direction " , " Direction " , " " , " " , " " ) ;
2015-11-27 13:50:31 +01:00
CAF_PDM_InitFieldNoDefault ( & wellPath , " WellPath " , " Well Path " , " " , " " , " " ) ;
2015-11-26 15:59:02 +01:00
CAF_PDM_InitFieldNoDefault ( & simulationWell , " SimulationWell " , " Simulation Well " , " " , " " , " " ) ;
2015-12-01 15:25:06 +01:00
CAF_PDM_InitFieldNoDefault ( & m_userPolyline , " Points " , " Points " , " " , " Use Ctrl-C for copy and Ctrl-V for paste " , " " ) ;
2016-10-18 10:22:20 +02:00
2017-11-21 18:57:33 +01:00
CAF_PDM_InitField ( & m_azimuthAngle , " AzimuthAngle " , 0.0 , " Azimuth " , " " , " " , " " ) ;
2017-11-21 13:43:22 +01:00
m_azimuthAngle . uiCapability ( ) - > setUiEditorTypeName ( caf : : PdmUiDoubleSliderEditor : : uiEditorTypeName ( ) ) ;
2017-11-21 18:57:33 +01:00
CAF_PDM_InitField ( & m_dipAngle , " DipAngle " , 90.0 , " Dip " , " " , " " , " " ) ;
2017-11-21 13:43:22 +01:00
m_dipAngle . uiCapability ( ) - > setUiEditorTypeName ( caf : : PdmUiDoubleSliderEditor : : uiEditorTypeName ( ) ) ;
2017-11-14 12:49:05 +01:00
2016-10-18 11:57:05 +02:00
CAF_PDM_InitFieldNoDefault ( & m_customExtrusionPoints , " CustomExtrusionPoints " , " " , " " , " " , " " ) ;
2019-03-11 11:30:12 +01:00
CAF_PDM_InitFieldNoDefault ( & m_twoAzimuthPoints , " TwoAzimuthPoints " , " Points " , " " , " Pick two points to define a line. \n Use Ctrl-C for copy and Ctrl-V for paste " , " " ) ;
2016-10-18 10:22:20 +02:00
2017-11-23 15:19:10 +01:00
CAF_PDM_InitField ( & m_branchIndex , " Branch " , - 1 , " Branch " , " " , " " , " " ) ;
CAF_PDM_InitField ( & m_extentLength , " ExtentLength " , 200.0 , " Extent Length " , " " , " " , " " ) ;
2017-11-24 13:57:35 +01:00
CAF_PDM_InitField ( & m_lengthUp , " lengthUp " , 1000.0 , " Length Up " , " " , " " , " " ) ;
CAF_PDM_InitField ( & m_lengthDown , " lengthDown " , 1000.0 , " Length Down " , " " , " " , " " ) ;
2017-11-23 15:19:10 +01:00
2016-10-04 10:10:06 +02:00
CAF_PDM_InitField ( & showInactiveCells , " ShowInactiveCells " , false , " Show Inactive Cells " , " " , " " , " " ) ;
2015-11-27 17:18:30 +01:00
2016-10-18 11:57:05 +02:00
CAF_PDM_InitFieldNoDefault ( & inputPolyLineFromViewerEnabled , " m_activateUiAppendPointsCommand " , " " , " " , " " , " " ) ;
2017-11-16 12:43:05 +01:00
caf : : PdmUiPushButtonEditor : : configureEditorForField ( & inputPolyLineFromViewerEnabled ) ;
2016-10-18 11:57:05 +02:00
inputPolyLineFromViewerEnabled = false ;
CAF_PDM_InitFieldNoDefault ( & inputExtrusionPointsFromViewerEnabled , " inputExtrusionPointsFromViewerEnabled " , " " , " " , " " , " " ) ;
2017-11-16 12:43:05 +01:00
caf : : PdmUiPushButtonEditor : : configureEditorForField ( & inputExtrusionPointsFromViewerEnabled ) ;
2016-10-18 11:57:05 +02:00
inputExtrusionPointsFromViewerEnabled = false ;
2015-11-26 15:59:02 +01:00
2017-11-21 13:43:22 +01:00
CAF_PDM_InitFieldNoDefault ( & inputTwoAzimuthPointsFromViewerEnabled , " inputTwoAzimuthPointsFromViewerEnabled " , " " , " " , " " , " " ) ;
caf : : PdmUiPushButtonEditor : : configureEditorForField ( & inputTwoAzimuthPointsFromViewerEnabled ) ;
inputTwoAzimuthPointsFromViewerEnabled = false ;
2016-10-10 15:38:31 +02:00
uiCapability ( ) - > setUiTreeChildrenHidden ( true ) ;
2015-11-18 09:15:13 +01:00
}
2015-12-03 08:26:38 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2016-09-21 10:48:25 +02:00
RimIntersection : : ~ RimIntersection ( )
2015-12-03 08:26:38 +01:00
{
}
2015-11-18 09:15:13 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2016-09-21 10:48:25 +02:00
void RimIntersection : : fieldChangedByUi ( const caf : : PdmFieldHandle * changedField , const QVariant & oldValue , const QVariant & newValue )
2015-11-18 09:15:13 +01:00
{
2015-11-19 18:56:23 +01:00
if ( changedField = = & isActive | |
changedField = = & type | |
changedField = = & direction | |
changedField = = & wellPath | |
2015-11-26 13:39:31 +01:00
changedField = = & simulationWell | |
2015-11-26 15:59:02 +01:00
changedField = = & m_branchIndex | |
2015-11-27 13:35:17 +01:00
changedField = = & m_extentLength | |
2017-11-24 13:57:35 +01:00
changedField = = & m_lengthUp | |
changedField = = & m_lengthDown | |
2015-11-27 13:35:17 +01:00
changedField = = & showInactiveCells )
2015-11-19 11:41:16 +01:00
{
2015-11-27 17:18:30 +01:00
rebuildGeometryAndScheduleCreateDisplayModel ( ) ;
2015-11-19 11:41:16 +01:00
}
2015-11-26 13:39:31 +01:00
if ( changedField = = & simulationWell
| | changedField = = & isActive
| | changedField = = & type )
{
2018-03-02 11:25:47 +01:00
recomputeSimulationWellBranchData ( ) ;
2015-11-26 13:39:31 +01:00
}
2015-11-27 10:13:29 +01:00
if ( changedField = = & simulationWell
| | changedField = = & wellPath
| | changedField = = & m_branchIndex )
{
updateName ( ) ;
}
2018-05-03 09:55:08 +02:00
if ( changedField = = & name )
{
Rim2dIntersectionView * iView = correspondingIntersectionView ( ) ;
if ( iView )
{
iView - > updateName ( ) ;
iView - > updateConnectedEditors ( ) ;
}
}
2016-10-18 11:57:05 +02:00
if ( changedField = = & inputPolyLineFromViewerEnabled
2015-11-30 13:54:56 +01:00
| | changedField = = & m_userPolyline )
2015-11-27 17:18:30 +01:00
{
2016-10-18 12:04:08 +02:00
if ( inputPolyLineFromViewerEnabled )
{
inputExtrusionPointsFromViewerEnabled = false ;
2017-11-21 13:43:22 +01:00
inputTwoAzimuthPointsFromViewerEnabled = false ;
2016-10-18 12:04:08 +02:00
}
2015-11-27 17:18:30 +01:00
rebuildGeometryAndScheduleCreateDisplayModel ( ) ;
}
2016-10-18 11:57:05 +02:00
if ( changedField = = & inputExtrusionPointsFromViewerEnabled
| | changedField = = & m_customExtrusionPoints )
{
2016-10-18 12:04:08 +02:00
if ( inputExtrusionPointsFromViewerEnabled )
{
inputPolyLineFromViewerEnabled = false ;
2017-11-21 13:43:22 +01:00
inputTwoAzimuthPointsFromViewerEnabled = false ;
2016-10-18 12:04:08 +02:00
}
2016-10-18 11:57:05 +02:00
rebuildGeometryAndScheduleCreateDisplayModel ( ) ;
}
2017-11-14 12:49:05 +01:00
2017-11-21 13:43:22 +01:00
if ( changedField = = & inputTwoAzimuthPointsFromViewerEnabled
| | changedField = = & m_twoAzimuthPoints )
{
if ( inputTwoAzimuthPointsFromViewerEnabled )
{
inputPolyLineFromViewerEnabled = false ;
inputExtrusionPointsFromViewerEnabled = false ;
}
rebuildGeometryAndScheduleCreateDisplayModel ( ) ;
}
if ( changedField = = & m_azimuthAngle )
{
updateAzimuthLine ( ) ;
rebuildGeometryAndScheduleCreateDisplayModel ( ) ;
}
if ( changedField = = & m_dipAngle )
2017-11-14 12:49:05 +01:00
{
rebuildGeometryAndScheduleCreateDisplayModel ( ) ;
}
2015-11-18 09:15:13 +01:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2016-09-21 10:48:25 +02:00
void RimIntersection : : defineUiOrdering ( QString uiConfigName , caf : : PdmUiOrdering & uiOrdering )
2015-11-18 09:15:13 +01:00
{
2015-11-18 12:16:04 +01:00
uiOrdering . add ( & name ) ;
2015-11-27 13:50:31 +01:00
caf : : PdmUiGroup * geometryGroup = uiOrdering . addNewGroup ( " Intersecting Geometry " ) ;
geometryGroup - > add ( & type ) ;
2015-11-18 12:16:04 +01:00
2015-11-18 15:55:05 +01:00
if ( type = = CS_WELL_PATH )
2015-11-18 12:16:04 +01:00
{
2015-11-27 13:50:31 +01:00
geometryGroup - > add ( & wellPath ) ;
2015-11-18 12:16:04 +01:00
}
2015-11-18 15:55:05 +01:00
else if ( type = = CS_SIMULATION_WELL )
2015-11-18 12:16:04 +01:00
{
2015-11-27 13:50:31 +01:00
geometryGroup - > add ( & simulationWell ) ;
2018-03-02 11:25:47 +01:00
updateSimulationWellCenterline ( ) ;
if ( simulationWell ( ) & & m_simulationWellBranchCenterlines . size ( ) > 1 )
2015-11-26 13:39:31 +01:00
{
2015-11-27 13:50:31 +01:00
geometryGroup - > add ( & m_branchIndex ) ;
2015-11-26 13:39:31 +01:00
}
2015-11-18 12:16:04 +01:00
}
2015-11-27 17:18:30 +01:00
else if ( type = = CS_POLYLINE )
2015-11-18 12:16:04 +01:00
{
2015-11-30 10:00:06 +01:00
geometryGroup - > add ( & m_userPolyline ) ;
2016-10-18 11:57:05 +02:00
geometryGroup - > add ( & inputPolyLineFromViewerEnabled ) ;
2015-11-18 12:16:04 +01:00
}
2017-11-21 13:43:22 +01:00
else if ( type = = CS_AZIMUTHLINE )
{
geometryGroup - > add ( & m_twoAzimuthPoints ) ;
geometryGroup - > add ( & inputTwoAzimuthPointsFromViewerEnabled ) ;
geometryGroup - > add ( & m_azimuthAngle ) ;
geometryGroup - > add ( & m_dipAngle ) ;
}
2015-11-18 12:16:04 +01:00
2015-11-27 13:50:31 +01:00
caf : : PdmUiGroup * optionsGroup = uiOrdering . addNewGroup ( " Options " ) ;
2017-11-23 15:19:10 +01:00
if ( type = = CS_AZIMUTHLINE )
{
2017-11-24 13:57:35 +01:00
optionsGroup - > add ( & m_lengthUp ) ;
optionsGroup - > add ( & m_lengthDown ) ;
2017-11-23 15:19:10 +01:00
}
else
2017-11-21 13:43:22 +01:00
{
optionsGroup - > add ( & direction ) ;
optionsGroup - > add ( & m_extentLength ) ;
}
2016-10-18 11:57:05 +02:00
if ( direction = = CS_TWO_POINTS )
{
optionsGroup - > add ( & m_customExtrusionPoints ) ;
optionsGroup - > add ( & inputExtrusionPointsFromViewerEnabled ) ;
}
2015-11-27 13:50:31 +01:00
optionsGroup - > add ( & showInactiveCells ) ;
2015-11-27 13:35:17 +01:00
2015-11-30 14:01:13 +01:00
if ( type = = CS_POLYLINE )
{
m_extentLength . uiCapability ( ) - > setUiReadOnly ( true ) ;
}
else
{
m_extentLength . uiCapability ( ) - > setUiReadOnly ( false ) ;
}
2015-11-26 16:47:45 +01:00
updateWellExtentDefaultValue ( ) ;
2015-11-26 15:59:02 +01:00
2017-03-21 13:47:53 +01:00
uiOrdering . skipRemainingFields ( true ) ;
2015-11-18 09:15:13 +01:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2016-09-21 10:48:25 +02:00
QList < caf : : PdmOptionItemInfo > RimIntersection : : calculateValueOptions ( const caf : : PdmFieldHandle * fieldNeedingOptions , bool * useOptionsOnly )
2015-11-18 09:15:13 +01:00
{
QList < caf : : PdmOptionItemInfo > options ;
2015-11-18 12:16:04 +01:00
if ( fieldNeedingOptions = = & wellPath )
{
2017-01-05 07:53:14 +01:00
RimTools : : wellPathOptionItems ( & options ) ;
2015-11-18 09:15:13 +01:00
2017-01-05 07:53:14 +01:00
if ( options . size ( ) > 0 )
2015-11-18 12:16:04 +01:00
{
2017-01-05 07:53:14 +01:00
options . push_front ( caf : : PdmOptionItemInfo ( " None " , nullptr ) ) ;
2015-11-18 12:16:04 +01:00
}
}
else if ( fieldNeedingOptions = = & simulationWell )
2015-11-18 09:15:13 +01:00
{
2017-10-13 14:20:47 +02:00
RimSimWellInViewCollection * coll = simulationWellCollection ( ) ;
2015-11-18 12:16:04 +01:00
if ( coll )
2015-11-18 09:15:13 +01:00
{
2017-10-13 10:16:01 +02:00
caf : : PdmChildArrayField < RimSimWellInView * > & simWells = coll - > wells ;
2015-11-18 09:15:13 +01:00
2019-05-06 10:36:05 +02:00
caf : : QIconProvider simWellIcon ( " :/Well.png " ) ;
2017-10-13 10:16:01 +02:00
for ( RimSimWellInView * eclWell : simWells )
2015-11-18 09:15:13 +01:00
{
2017-01-05 07:53:14 +01:00
options . push_back ( caf : : PdmOptionItemInfo ( eclWell - > name ( ) , eclWell , false , simWellIcon ) ) ;
2015-11-18 09:15:13 +01:00
}
2015-11-18 12:16:04 +01:00
}
if ( options . size ( ) = = 0 )
{
2017-01-05 07:53:14 +01:00
options . push_front ( caf : : PdmOptionItemInfo ( " None " , nullptr ) ) ;
2015-11-18 09:15:13 +01:00
}
}
2015-11-26 15:59:02 +01:00
else if ( fieldNeedingOptions = = & m_branchIndex )
2015-11-26 13:39:31 +01:00
{
2018-03-02 11:25:47 +01:00
updateSimulationWellCenterline ( ) ;
2015-11-26 13:39:31 +01:00
2018-03-02 11:25:47 +01:00
size_t branchCount = m_simulationWellBranchCenterlines . size ( ) ;
2015-11-26 13:39:31 +01:00
options . push_back ( caf : : PdmOptionItemInfo ( " All " , - 1 ) ) ;
2015-11-18 12:16:04 +01:00
2015-12-01 05:19:49 -08:00
for ( size_t bIdx = 0 ; bIdx < branchCount ; + + bIdx )
2015-11-26 13:39:31 +01:00
{
options . push_back ( caf : : PdmOptionItemInfo ( QString : : number ( bIdx + 1 ) , QVariant : : fromValue ( bIdx ) ) ) ;
}
}
2015-11-18 09:15:13 +01:00
return options ;
}
2015-11-18 10:06:42 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2016-09-21 10:48:25 +02:00
caf : : PdmFieldHandle * RimIntersection : : userDescriptionField ( )
2015-11-18 10:06:42 +01:00
{
return & name ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2016-09-21 10:48:25 +02:00
caf : : PdmFieldHandle * RimIntersection : : objectToggleField ( )
2015-11-18 10:06:42 +01:00
{
return & isActive ;
}
2015-11-18 12:16:04 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2018-03-02 15:16:43 +01:00
RimSimWellInViewCollection * RimIntersection : : simulationWellCollection ( ) const
2015-11-18 12:16:04 +01:00
{
2017-11-14 12:49:05 +01:00
RimEclipseView * eclipseView = nullptr ;
2016-09-21 13:59:41 +02:00
firstAncestorOrThisOfType ( eclipseView ) ;
2015-11-18 12:16:04 +01:00
if ( eclipseView )
{
2018-03-01 07:51:30 +01:00
return eclipseView - > wellCollection ( ) ;
2015-11-18 12:16:04 +01:00
}
2017-11-14 12:49:05 +01:00
return nullptr ;
2015-11-18 12:16:04 +01:00
}
2015-11-18 15:55:05 +01:00
2017-11-21 13:43:22 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimIntersection : : updateAzimuthLine ( )
{
if ( m_twoAzimuthPoints ( ) . size ( ) = = 2 )
{
double currentAzimuth = azimuthInRadians ( m_twoAzimuthPoints ( ) [ 1 ] - m_twoAzimuthPoints ( ) [ 0 ] ) ;
double newAzimuth = cvf : : Math : : toRadians ( m_azimuthAngle ) ;
double rotAngle = newAzimuth - currentAzimuth ;
cvf : : Mat4d rotMat = cvf : : Mat4d : : fromRotation ( - cvf : : Vec3d : : Z_AXIS , rotAngle ) ;
cvf : : Mat4d transFromOriginMat = cvf : : Mat4d : : fromTranslation ( m_twoAzimuthPoints ( ) [ 0 ] ) ;
cvf : : Mat4d transToOriginMat = cvf : : Mat4d : : fromTranslation ( - m_twoAzimuthPoints ( ) [ 0 ] ) ;
m_twoAzimuthPoints . v ( ) [ 1 ] = m_twoAzimuthPoints ( ) [ 1 ] . getTransformedPoint ( transFromOriginMat * rotMat * transToOriginMat ) ;
m_twoAzimuthPoints . uiCapability ( ) - > updateConnectedEditors ( ) ;
}
}
2015-11-18 15:55:05 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2018-03-13 16:16:41 +01:00
std : : vector < std : : vector < cvf : : Vec3d > > RimIntersection : : polyLines ( cvf : : Vec3d * flattenedPolylineStartPoint ) const
2015-11-18 15:55:05 +01:00
{
2018-03-13 16:16:41 +01:00
if ( flattenedPolylineStartPoint ) * flattenedPolylineStartPoint = cvf : : Vec3d : : ZERO ;
2018-02-13 16:56:48 +01:00
2015-11-23 14:26:45 +01:00
std : : vector < std : : vector < cvf : : Vec3d > > lines ;
2018-03-06 15:14:54 +01:00
2018-02-13 16:56:48 +01:00
double horizontalProjectedLengthAlongWellPathToClipPoint = 0.0 ;
2018-03-06 15:14:54 +01:00
2015-11-18 15:55:05 +01:00
if ( type = = CS_WELL_PATH )
{
2017-12-05 14:03:40 +01:00
if ( wellPath ( ) & & wellPath - > wellPathGeometry ( ) )
2015-11-18 15:55:05 +01:00
{
2015-11-23 14:26:45 +01:00
lines . push_back ( wellPath - > wellPathGeometry ( ) - > m_wellPathPoints ) ;
2018-03-20 13:12:20 +01:00
RimCase * ownerCase = nullptr ;
this - > firstAncestorOrThisOfType ( ownerCase ) ;
if ( ownerCase )
{
2018-03-21 13:56:24 +01:00
size_t dummy ;
lines [ 0 ] = RigWellPath : : clipPolylineStartAboveZ ( lines [ 0 ] ,
ownerCase - > activeCellsBoundingBox ( ) . max ( ) . z ( ) ,
& horizontalProjectedLengthAlongWellPathToClipPoint ,
& dummy ) ;
2018-03-20 13:12:20 +01:00
}
2015-11-18 15:55:05 +01:00
}
}
else if ( type = = CS_SIMULATION_WELL )
{
2015-11-26 11:08:38 +01:00
if ( simulationWell ( ) )
{
2018-03-02 11:25:47 +01:00
updateSimulationWellCenterline ( ) ;
2015-11-26 13:39:31 +01:00
2018-03-02 15:16:43 +01:00
int branchIndexToUse = branchIndex ( ) ;
if ( 0 < = branchIndexToUse & & branchIndexToUse < static_cast < int > ( m_simulationWellBranchCenterlines . size ( ) ) )
2015-11-26 13:39:31 +01:00
{
2018-03-02 15:16:43 +01:00
lines . push_back ( m_simulationWellBranchCenterlines [ branchIndexToUse ] ) ;
2015-11-26 13:39:31 +01:00
}
2018-03-02 15:16:43 +01:00
if ( branchIndexToUse = = - 1 )
2015-11-26 13:39:31 +01:00
{
2018-03-02 11:25:47 +01:00
lines = m_simulationWellBranchCenterlines ;
2015-11-26 13:39:31 +01:00
}
2015-11-26 11:08:38 +01:00
}
2015-11-18 15:55:05 +01:00
}
2015-11-27 17:18:30 +01:00
else if ( type = = CS_POLYLINE )
2015-11-18 15:55:05 +01:00
{
2015-11-30 10:00:06 +01:00
lines . push_back ( m_userPolyline ) ;
2015-11-18 15:55:05 +01:00
}
2017-11-21 13:43:22 +01:00
else if ( type = = CS_AZIMUTHLINE )
{
lines . push_back ( m_twoAzimuthPoints ) ;
}
2015-11-18 15:55:05 +01:00
2015-11-23 14:26:45 +01:00
if ( type = = CS_WELL_PATH | | type = = CS_SIMULATION_WELL )
{
2018-02-28 17:18:48 +01:00
if ( type = = CS_SIMULATION_WELL & & simulationWell ( ) )
{
cvf : : Vec3d top , bottom ;
simulationWell - > wellHeadTopBottomPosition ( - 1 , & top , & bottom ) ;
for ( size_t lIdx = 0 ; lIdx < lines . size ( ) ; + + lIdx )
{
std : : vector < cvf : : Vec3d > & polyLine = lines [ lIdx ] ;
polyLine . insert ( polyLine . begin ( ) , top ) ;
}
}
2015-12-01 05:19:49 -08:00
for ( size_t lIdx = 0 ; lIdx < lines . size ( ) ; + + lIdx )
2015-11-23 14:26:45 +01:00
{
2015-11-26 15:59:02 +01:00
std : : vector < cvf : : Vec3d > & polyLine = lines [ lIdx ] ;
addExtents ( polyLine ) ;
2015-11-23 14:26:45 +01:00
}
2018-02-13 16:56:48 +01:00
2018-03-13 16:16:41 +01:00
if ( flattenedPolylineStartPoint & & lines . size ( ) & & lines [ 0 ] . size ( ) > 1 )
2018-02-13 16:56:48 +01:00
{
2018-03-13 16:16:41 +01:00
( * flattenedPolylineStartPoint ) [ 0 ] = horizontalProjectedLengthAlongWellPathToClipPoint - m_extentLength ;
( * flattenedPolylineStartPoint ) [ 2 ] = lines [ 0 ] [ 1 ] . z ( ) ; // Depth of first point in first polyline
}
}
else
{
if ( flattenedPolylineStartPoint & & lines . size ( ) & & lines [ 0 ] . size ( ) )
{
( * flattenedPolylineStartPoint ) [ 2 ] = lines [ 0 ] [ 0 ] . z ( ) ; // Depth of first point in first polyline
2018-02-13 16:56:48 +01:00
}
2015-11-23 14:26:45 +01:00
}
return lines ;
2015-11-18 15:55:05 +01:00
}
2015-11-19 11:41:16 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2016-10-25 10:03:55 +02:00
RivIntersectionPartMgr * RimIntersection : : intersectionPartMgr ( )
2015-11-19 11:41:16 +01:00
{
2016-09-21 10:32:29 +02:00
if ( m_crossSectionPartMgr . isNull ( ) ) m_crossSectionPartMgr = new RivIntersectionPartMgr ( this ) ;
2015-11-19 11:41:16 +01:00
return m_crossSectionPartMgr . p ( ) ;
}
2018-11-06 10:09:30 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimIntersection : : rebuildGeometry ( )
{
m_crossSectionPartMgr = nullptr ;
}
2016-10-18 14:25:31 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2018-03-12 15:14:22 +01:00
std : : vector < cvf : : Vec3d > RimIntersection : : polyLinesForExtrusionDirection ( ) const
2016-10-18 14:25:31 +02:00
{
2018-03-12 15:14:22 +01:00
return m_customExtrusionPoints ;
2016-10-18 14:25:31 +02:00
}
2015-11-26 13:39:31 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2018-03-02 11:25:47 +01:00
void RimIntersection : : updateSimulationWellCenterline ( ) const
2015-11-26 13:39:31 +01:00
{
if ( isActive ( ) & & type = = CS_SIMULATION_WELL & & simulationWell ( ) )
{
2018-03-02 13:54:42 +01:00
if ( m_simulationWellBranchCenterlines . empty ( ) )
2015-11-26 13:39:31 +01:00
{
2018-03-02 13:54:42 +01:00
auto branches = simulationWell - > wellPipeBranches ( ) ;
for ( const auto & branch : branches )
2017-12-08 12:22:35 +01:00
{
2018-03-02 13:54:42 +01:00
m_simulationWellBranchCenterlines . push_back ( branch - > m_wellPathPoints ) ;
2017-12-08 12:22:35 +01:00
}
2015-11-26 13:39:31 +01:00
}
}
else
{
2018-03-02 11:25:47 +01:00
m_simulationWellBranchCenterlines . clear ( ) ;
2015-11-26 13:39:31 +01:00
}
}
2015-11-26 15:59:02 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2016-09-21 10:48:25 +02:00
void RimIntersection : : addExtents ( std : : vector < cvf : : Vec3d > & polyLine ) const
2015-11-26 15:59:02 +01:00
{
size_t lineVxCount = polyLine . size ( ) ;
if ( lineVxCount = = 0 ) return ;
// Add extent at end of well
{
size_t endIdxOffset = lineVxCount > 3 ? 3 : lineVxCount ;
cvf : : Vec3d endDirection = ( polyLine [ lineVxCount - 1 ] - polyLine [ lineVxCount - endIdxOffset ] ) ;
2017-11-21 13:43:22 +01:00
endDirection [ 2 ] = 0 ; // Remove z. make extent length be horizontally
2015-11-26 15:59:02 +01:00
if ( endDirection . length ( ) < 1e-2 )
{
endDirection = polyLine . back ( ) - polyLine . front ( ) ;
endDirection [ 2 ] = 0 ;
if ( endDirection . length ( ) < 1e-2 )
{
endDirection = cvf : : Vec3d : : X_AXIS ;
}
}
endDirection . normalize ( ) ;
cvf : : Vec3d newEnd = polyLine . back ( ) + endDirection * m_extentLength ( ) ;
polyLine . push_back ( newEnd ) ;
}
// Add extent at start
{
size_t endIdxOffset = lineVxCount > 3 ? 3 : lineVxCount - 1 ;
cvf : : Vec3d startDirection = ( polyLine [ 0 ] - polyLine [ endIdxOffset ] ) ;
2017-11-14 12:49:05 +01:00
startDirection [ 2 ] = 0 ; // Remove z. make extent length be horizontally
2015-11-26 15:59:02 +01:00
if ( startDirection . length ( ) < 1e-2 )
{
startDirection = polyLine . front ( ) - polyLine . back ( ) ;
startDirection [ 2 ] = 0 ;
if ( startDirection . length ( ) < 1e-2 )
{
startDirection = - cvf : : Vec3d : : X_AXIS ;
}
}
startDirection . normalize ( ) ;
cvf : : Vec3d newStart = polyLine . front ( ) + startDirection * m_extentLength ( ) ;
polyLine . insert ( polyLine . begin ( ) , newStart ) ;
}
}
2015-11-26 16:47:45 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2016-09-21 10:48:25 +02:00
void RimIntersection : : updateWellExtentDefaultValue ( )
2015-11-26 16:47:45 +01:00
{
2017-11-14 12:49:05 +01:00
RimCase * ownerCase = nullptr ;
2016-09-21 13:59:41 +02:00
firstAncestorOrThisOfType ( ownerCase ) ;
2015-11-26 16:47:45 +01:00
if ( ownerCase )
{
cvf : : BoundingBox caseBB = ownerCase - > activeCellsBoundingBox ( ) ;
if ( m_extentLength = = m_extentLength . defaultValue ( ) & & caseBB . radius ( ) < 1000 )
{
m_extentLength = caseBB . radius ( ) * 0.1 ;
}
}
}
2015-11-27 10:13:29 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2016-09-21 10:48:25 +02:00
void RimIntersection : : updateName ( )
2015-11-27 10:13:29 +01:00
{
if ( type = = CS_SIMULATION_WELL & & simulationWell ( ) )
{
name = simulationWell ( ) - > name ( ) ;
2018-03-02 15:16:43 +01:00
if ( branchIndex ( ) ! = - 1 )
2015-11-27 10:13:29 +01:00
{
2018-03-02 15:16:43 +01:00
name = name ( ) + " Branch " + QString : : number ( branchIndex ( ) + 1 ) ;
2015-11-27 10:13:29 +01:00
}
}
else if ( type ( ) = = CS_WELL_PATH & & wellPath ( ) )
{
name = wellPath ( ) - > name ( ) ;
}
2018-05-03 09:55:08 +02:00
Rim2dIntersectionView * iView = correspondingIntersectionView ( ) ;
if ( iView )
{
iView - > updateName ( ) ;
iView - > updateConnectedEditors ( ) ;
}
2015-11-27 10:13:29 +01:00
}
2018-03-02 15:16:43 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
int RimIntersection : : branchIndex ( ) const
{
RimSimWellInViewCollection * coll = simulationWellCollection ( ) ;
if ( coll & & ! coll - > isAutoDetectingBranches ( ) )
{
return - 1 ;
}
2018-03-06 10:29:35 +01:00
if ( m_branchIndex > = static_cast < int > ( m_simulationWellBranchCenterlines . size ( ) ) )
2018-03-02 15:16:43 +01:00
{
return - 1 ;
}
return m_branchIndex ;
}
2015-11-27 17:18:30 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2017-11-21 13:43:22 +01:00
void RimIntersection : : setPushButtonText ( bool buttonEnable , caf : : PdmUiPushButtonEditorAttribute * attribute )
2015-11-27 17:18:30 +01:00
{
2017-11-21 13:43:22 +01:00
if ( attribute )
2015-11-27 17:18:30 +01:00
{
2017-11-21 13:43:22 +01:00
if ( buttonEnable )
2015-11-27 17:18:30 +01:00
{
2017-11-21 13:43:22 +01:00
attribute - > m_buttonText = " Stop picking points " ;
2015-11-27 17:18:30 +01:00
}
2017-11-21 13:43:22 +01:00
else
2016-10-18 11:57:05 +02:00
{
2017-11-21 13:43:22 +01:00
attribute - > m_buttonText = " Start picking points " ;
2016-10-18 11:57:05 +02:00
}
}
2017-11-21 13:43:22 +01:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimIntersection : : setBaseColor ( bool enable , caf : : PdmUiListEditorAttribute * attribute )
{
if ( attribute & & enable )
2016-10-18 11:57:05 +02:00
{
2017-11-21 13:43:22 +01:00
attribute - > m_baseColor . setRgb ( 255 , 220 , 255 ) ;
}
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimIntersection : : defineEditorAttribute ( const caf : : PdmFieldHandle * field , QString uiConfigName , caf : : PdmUiEditorAttribute * attribute )
{
2016-10-18 11:57:05 +02:00
2017-11-21 13:43:22 +01:00
caf : : PdmUiDoubleSliderEditorAttribute * doubleSliderAttrib = dynamic_cast < caf : : PdmUiDoubleSliderEditorAttribute * > ( attribute ) ;
if ( doubleSliderAttrib )
{
2017-11-23 10:59:52 +01:00
if ( field = = & m_azimuthAngle )
2016-10-18 11:57:05 +02:00
{
2017-11-21 13:43:22 +01:00
doubleSliderAttrib - > m_minimum = 0 ;
doubleSliderAttrib - > m_maximum = 360 ;
doubleSliderAttrib - > m_sliderTickCount = 360 ;
2016-10-18 11:57:05 +02:00
}
2017-11-23 10:59:52 +01:00
else if ( field = = & m_dipAngle )
{
doubleSliderAttrib - > m_minimum = 0 ;
doubleSliderAttrib - > m_maximum = 180 ;
doubleSliderAttrib - > m_sliderTickCount = 180 ;
}
2016-10-18 11:57:05 +02:00
}
2017-11-21 13:43:22 +01:00
else if ( field = = & inputPolyLineFromViewerEnabled )
{
setPushButtonText ( inputPolyLineFromViewerEnabled , dynamic_cast < caf : : PdmUiPushButtonEditorAttribute * > ( attribute ) ) ;
}
else if ( field = = & m_userPolyline )
{
setBaseColor ( inputPolyLineFromViewerEnabled , dynamic_cast < caf : : PdmUiListEditorAttribute * > ( attribute ) ) ;
}
else if ( field = = & inputTwoAzimuthPointsFromViewerEnabled )
{
setPushButtonText ( inputTwoAzimuthPointsFromViewerEnabled , dynamic_cast < caf : : PdmUiPushButtonEditorAttribute * > ( attribute ) ) ;
}
else if ( field = = & m_twoAzimuthPoints )
{
setBaseColor ( inputTwoAzimuthPointsFromViewerEnabled , dynamic_cast < caf : : PdmUiListEditorAttribute * > ( attribute ) ) ;
}
else if ( field = = & inputExtrusionPointsFromViewerEnabled )
{
setPushButtonText ( inputExtrusionPointsFromViewerEnabled , dynamic_cast < caf : : PdmUiPushButtonEditorAttribute * > ( attribute ) ) ;
}
2016-10-18 11:57:05 +02:00
else if ( field = = & m_customExtrusionPoints )
{
2017-11-21 13:43:22 +01:00
setBaseColor ( inputExtrusionPointsFromViewerEnabled , dynamic_cast < caf : : PdmUiListEditorAttribute * > ( attribute ) ) ;
2015-11-30 15:12:00 +01:00
}
2015-11-27 17:18:30 +01:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2016-09-21 10:48:25 +02:00
void RimIntersection : : appendPointToPolyLine ( const cvf : : Vec3d & point )
2015-11-27 17:18:30 +01:00
{
2015-11-30 10:00:06 +01:00
m_userPolyline . v ( ) . push_back ( point ) ;
2015-11-27 17:18:30 +01:00
2015-11-30 10:00:06 +01:00
m_userPolyline . uiCapability ( ) - > updateConnectedEditors ( ) ;
2015-11-27 17:18:30 +01:00
rebuildGeometryAndScheduleCreateDisplayModel ( ) ;
}
2018-01-25 17:37:22 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
Rim2dIntersectionView * RimIntersection : : correspondingIntersectionView ( )
{
2018-08-15 12:55:45 +02:00
std : : vector < Rim2dIntersectionView * > objects ;
this - > objectsWithReferringPtrFieldsOfType ( objects ) ;
for ( auto isectView : objects )
2018-01-25 17:37:22 +01:00
{
2018-08-15 12:55:45 +02:00
if ( isectView )
{
return isectView ;
}
2018-01-25 17:37:22 +01:00
}
2018-08-15 12:55:45 +02:00
return nullptr ;
2018-01-25 17:37:22 +01:00
}
2016-10-18 11:57:05 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2016-10-18 14:25:31 +02:00
void RimIntersection : : appendPointToExtrusionDirection ( const cvf : : Vec3d & point )
2016-10-18 11:57:05 +02:00
{
if ( m_customExtrusionPoints ( ) . size ( ) > 1 ) m_customExtrusionPoints . v ( ) . clear ( ) ;
m_customExtrusionPoints . v ( ) . push_back ( point ) ;
m_customExtrusionPoints . uiCapability ( ) - > updateConnectedEditors ( ) ;
2016-11-04 09:25:01 +01:00
rebuildGeometryAndScheduleCreateDisplayModel ( ) ;
2016-10-18 11:57:05 +02:00
}
2017-11-21 13:43:22 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimIntersection : : appendPointToAzimuthLine ( const cvf : : Vec3d & point )
{
if ( m_twoAzimuthPoints ( ) . empty ( ) )
{
m_twoAzimuthPoints . v ( ) . push_back ( point ) ;
}
else if ( m_twoAzimuthPoints ( ) . size ( ) = = 1 )
{
cvf : : Vec3d projectedPoint = cvf : : Vec3d ( point [ 0 ] , point [ 1 ] , m_twoAzimuthPoints . v ( ) [ 0 ] [ 2 ] ) ;
m_twoAzimuthPoints . v ( ) . push_back ( projectedPoint ) ;
m_azimuthAngle = cvf : : Math : : toDegrees ( azimuthInRadians ( m_twoAzimuthPoints ( ) [ 1 ] - m_twoAzimuthPoints ( ) [ 0 ] ) ) ;
2017-11-23 11:08:02 +01:00
m_azimuthAngle . uiCapability ( ) - > updateConnectedEditors ( ) ;
2017-11-21 13:43:22 +01:00
}
else if ( m_twoAzimuthPoints ( ) . size ( ) > 1 )
{
m_twoAzimuthPoints . v ( ) . clear ( ) ;
m_twoAzimuthPoints . v ( ) . push_back ( point ) ;
}
m_twoAzimuthPoints . uiCapability ( ) - > updateConnectedEditors ( ) ;
rebuildGeometryAndScheduleCreateDisplayModel ( ) ;
}
2016-10-18 10:22:20 +02:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
cvf : : Vec3d RimIntersection : : extrusionDirection ( ) const
{
cvf : : Vec3d dir = cvf : : Vec3d : : Z_AXIS ;
2016-10-20 11:27:07 +02:00
if ( direction ( ) = = RimIntersection : : CS_HORIZONTAL )
2016-10-18 10:22:20 +02:00
{
2016-10-20 11:27:07 +02:00
std : : vector < std : : vector < cvf : : Vec3d > > lines = this - > polyLines ( ) ;
if ( lines . size ( ) > 0 & & lines [ 0 ] . size ( ) > 1 )
{
std : : vector < cvf : : Vec3d > firstLine = lines [ 0 ] ;
// Use first and last point of polyline to approximate orientation of polyline
// Then cross with Z axis to find extrusion direction
2016-10-18 10:22:20 +02:00
2016-10-20 11:27:07 +02:00
cvf : : Vec3d polyLineDir = firstLine [ firstLine . size ( ) - 1 ] - firstLine [ 0 ] ;
cvf : : Vec3d up = cvf : : Vec3d : : Z_AXIS ;
dir = polyLineDir ^ up ;
}
2016-10-18 10:22:20 +02:00
}
2016-10-18 11:57:05 +02:00
else if ( direction ( ) = = RimIntersection : : CS_TWO_POINTS & & m_customExtrusionPoints ( ) . size ( ) > 1 )
{
dir = m_customExtrusionPoints ( ) [ m_customExtrusionPoints ( ) . size ( ) - 1 ] - m_customExtrusionPoints ( ) [ 0 ] ;
}
2017-11-21 13:43:22 +01:00
else if ( m_twoAzimuthPoints ( ) . size ( ) = = 2 )
2017-11-14 12:49:05 +01:00
{
double dipInRad = cvf : : Math : : toRadians ( m_dipAngle ) ;
2017-11-21 13:43:22 +01:00
cvf : : Vec3d azimutDirection = m_twoAzimuthPoints ( ) [ 1 ] - m_twoAzimuthPoints ( ) [ 0 ] ;
cvf : : Mat3d rotMat = cvf : : Mat3d : : fromRotation ( azimutDirection , dipInRad ) ;
cvf : : Vec3d vecPerpToRotVecInHorizontalPlane = azimutDirection ^ cvf : : Vec3d : : Z_AXIS ;
2017-11-14 12:49:05 +01:00
2017-11-21 13:43:22 +01:00
dir = vecPerpToRotVecInHorizontalPlane . getTransformedVector ( rotMat ) ;
2017-11-14 12:49:05 +01:00
}
2016-10-18 10:22:20 +02:00
return dir ;
}
2017-11-23 15:19:10 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2017-11-24 13:57:35 +01:00
double RimIntersection : : lengthUp ( ) const
2017-11-23 15:19:10 +01:00
{
2017-11-24 13:57:35 +01:00
return m_lengthUp ;
2017-11-23 15:19:10 +01:00
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2017-11-24 13:57:35 +01:00
double RimIntersection : : lengthDown ( ) const
2017-11-23 15:19:10 +01:00
{
2017-11-24 13:57:35 +01:00
return m_lengthDown ;
}
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimIntersection : : setLengthDown ( double lengthDown )
{
m_lengthDown = lengthDown ;
}
2018-03-02 11:25:47 +01:00
//--------------------------------------------------------------------------------------------------
2018-03-13 16:16:41 +01:00
///
//--------------------------------------------------------------------------------------------------
double RimIntersection : : extentLength ( )
{
return m_extentLength ( ) ;
}
//--------------------------------------------------------------------------------------------------
2018-03-02 11:25:47 +01:00
///
//--------------------------------------------------------------------------------------------------
void RimIntersection : : recomputeSimulationWellBranchData ( )
{
if ( type ( ) = = CS_SIMULATION_WELL )
{
m_simulationWellBranchCenterlines . clear ( ) ;
updateSimulationWellCenterline ( ) ;
m_crossSectionPartMgr = nullptr ;
}
}
2018-03-12 09:21:27 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
bool RimIntersection : : hasDefiningPoints ( ) const
{
return type = = CS_POLYLINE | | type = = CS_AZIMUTHLINE ;
}
2017-11-24 13:57:35 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void RimIntersection : : setLengthUp ( double lengthUp )
{
m_lengthUp = lengthUp ;
2017-11-23 15:19:10 +01:00
}
2015-11-27 17:18:30 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
2016-09-21 10:48:25 +02:00
void RimIntersection : : rebuildGeometryAndScheduleCreateDisplayModel ( )
2015-11-27 17:18:30 +01:00
{
2017-11-14 12:49:05 +01:00
m_crossSectionPartMgr = nullptr ;
2015-11-27 17:18:30 +01:00
2018-01-09 10:11:28 +01:00
Rim3dView * rimView = nullptr ;
2016-09-21 13:59:41 +02:00
this - > firstAncestorOrThisOfType ( rimView ) ;
2015-11-27 17:18:30 +01:00
if ( rimView )
{
rimView - > scheduleCreateDisplayModelAndRedraw ( ) ;
}
2018-01-25 17:37:22 +01:00
Rim2dIntersectionView * iview = correspondingIntersectionView ( ) ;
if ( iview )
{
iview - > scheduleGeometryRegen ( RivCellSetEnum : : ALL_CELLS ) ;
iview - > scheduleCreateDisplayModelAndRedraw ( ) ;
}
2015-11-27 17:18:30 +01:00
}
2017-11-21 13:43:22 +01:00
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
double RimIntersection : : azimuthInRadians ( cvf : : Vec3d vec )
{
return cvf : : GeometryTools : : getAngle ( - cvf : : Vec3d : : Z_AXIS , cvf : : Vec3d : : Y_AXIS , vec ) ;
}