Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
//
|
2014-09-23 08:04:57 -05:00
|
|
|
// Copyright (C) 2011- Statoil ASA
|
|
|
|
// Copyright (C) 2013- Ceetron Solutions AS
|
|
|
|
// Copyright (C) 2011-2012 Ceetron AS
|
2019-09-06 03:40:57 -05:00
|
|
|
//
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
// 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.
|
2019-09-06 03:40:57 -05:00
|
|
|
//
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
// 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.
|
2019-09-06 03:40:57 -05:00
|
|
|
//
|
|
|
|
// See the GNU General Public License at <http://www.gnu.org/licenses/gpl.html>
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
// for more details.
|
|
|
|
//
|
|
|
|
/////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
2015-12-03 12:31:34 -06:00
|
|
|
#include "RivWellPathPartMgr.h"
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
|
2019-05-06 03:36:05 -05:00
|
|
|
#include "RiaGuiApplication.h"
|
2015-12-03 12:31:34 -06:00
|
|
|
|
2018-03-12 05:07:46 -05:00
|
|
|
#include "RigEclipseCaseData.h"
|
2017-06-16 01:56:02 -05:00
|
|
|
#include "RigMainGrid.h"
|
2018-03-12 05:07:46 -05:00
|
|
|
#include "RigVirtualPerforationTransmissibilities.h"
|
2015-12-03 12:31:34 -06:00
|
|
|
#include "RigWellPath.h"
|
|
|
|
|
2018-03-20 05:29:46 -05:00
|
|
|
#include "Rim3dWellLogCurveCollection.h"
|
2017-06-16 01:56:02 -05:00
|
|
|
#include "RimEclipseCase.h"
|
|
|
|
#include "RimEclipseView.h"
|
2021-02-26 07:27:59 -06:00
|
|
|
#include "RimFishbones.h"
|
2017-06-16 01:56:02 -05:00
|
|
|
#include "RimFishbonesCollection.h"
|
2021-04-13 00:22:56 -05:00
|
|
|
#include "RimModeledWellPath.h"
|
2017-05-12 03:01:37 -05:00
|
|
|
#include "RimPerforationCollection.h"
|
2017-06-16 01:56:02 -05:00
|
|
|
#include "RimPerforationInterval.h"
|
2019-11-27 05:05:01 -06:00
|
|
|
#include "RimRegularLegendConfig.h"
|
2019-11-25 05:18:39 -06:00
|
|
|
#include "RimTools.h"
|
2021-09-09 10:34:27 -05:00
|
|
|
#include "RimWellIASettings.h"
|
|
|
|
#include "RimWellIASettingsCollection.h"
|
2019-11-13 08:29:09 -06:00
|
|
|
#include "RimWellMeasurement.h"
|
|
|
|
#include "RimWellMeasurementCollection.h"
|
2019-11-25 05:18:39 -06:00
|
|
|
#include "RimWellMeasurementFilter.h"
|
2019-11-29 06:49:43 -06:00
|
|
|
#include "RimWellMeasurementInView.h"
|
2019-11-27 05:05:01 -06:00
|
|
|
#include "RimWellMeasurementInViewCollection.h"
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
#include "RimWellPath.h"
|
2018-10-10 09:57:43 -05:00
|
|
|
#include "RimWellPathAttribute.h"
|
|
|
|
#include "RimWellPathAttributeCollection.h"
|
2015-12-03 12:31:34 -06:00
|
|
|
#include "RimWellPathCollection.h"
|
2017-06-22 04:21:50 -05:00
|
|
|
#include "RimWellPathFracture.h"
|
2019-09-06 03:40:57 -05:00
|
|
|
#include "RimWellPathFractureCollection.h"
|
2021-04-13 00:22:56 -05:00
|
|
|
#include "RimWellPathGeometryDef.h"
|
|
|
|
#include "RimWellPathTarget.h"
|
2019-11-25 05:18:39 -06:00
|
|
|
#include "RimWellPathValve.h"
|
2015-12-03 12:31:34 -06:00
|
|
|
|
2018-03-09 06:15:01 -06:00
|
|
|
#include "Riv3dWellLogPlanePartMgr.h"
|
2021-09-09 10:34:27 -05:00
|
|
|
#include "RivBoxGeometryGenerator.h"
|
2021-08-13 09:48:33 -05:00
|
|
|
#include "RivDrawableSpheres.h"
|
2017-05-05 04:21:40 -05:00
|
|
|
#include "RivFishbonesSubsPartMgr.h"
|
2017-06-16 01:56:02 -05:00
|
|
|
#include "RivObjectSourceInfo.h"
|
2017-02-17 07:52:56 -06:00
|
|
|
#include "RivPartPriority.h"
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
#include "RivPipeGeometryGenerator.h"
|
2021-08-26 01:13:03 -05:00
|
|
|
#include "RivSectionFlattener.h"
|
2019-09-06 03:40:57 -05:00
|
|
|
#include "RivTextLabelSourceInfo.h"
|
2018-03-15 15:25:54 -05:00
|
|
|
#include "RivWellConnectionFactorPartMgr.h"
|
2017-01-19 00:28:04 -06:00
|
|
|
#include "RivWellFracturePartMgr.h"
|
2017-01-04 01:10:02 -06:00
|
|
|
#include "RivWellPathPartMgr.h"
|
2018-03-09 06:15:01 -06:00
|
|
|
#include "RivWellPathSourceInfo.h"
|
2015-12-03 12:31:34 -06:00
|
|
|
|
2018-03-14 03:35:48 -05:00
|
|
|
#include "RiuViewer.h"
|
|
|
|
|
2017-01-06 03:26:57 -06:00
|
|
|
#include "cafDisplayCoordTransform.h"
|
2015-12-03 12:31:34 -06:00
|
|
|
#include "cafEffectGenerator.h"
|
2021-04-13 00:22:56 -05:00
|
|
|
|
2015-12-03 12:31:34 -06:00
|
|
|
#include "cvfDrawableGeo.h"
|
|
|
|
#include "cvfDrawableText.h"
|
2021-04-13 00:22:56 -05:00
|
|
|
#include "cvfDrawableVectors.h"
|
2015-12-03 12:31:34 -06:00
|
|
|
#include "cvfFont.h"
|
2021-04-13 00:22:56 -05:00
|
|
|
#include "cvfGeometryBuilderTriangles.h"
|
|
|
|
#include "cvfGeometryUtils.h"
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
#include "cvfModelBasicList.h"
|
2021-04-13 00:22:56 -05:00
|
|
|
#include "cvfOpenGLResourceManager.h"
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
#include "cvfPart.h"
|
2019-11-13 08:29:09 -06:00
|
|
|
#include "cvfScalarMapperContinuousLinear.h"
|
2021-04-13 00:22:56 -05:00
|
|
|
#include "cvfShaderProgram.h"
|
2018-02-05 06:23:14 -06:00
|
|
|
#include "cvfTransform.h"
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
#include "cvfqtUtils.h"
|
2015-12-03 12:31:34 -06:00
|
|
|
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
///
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
RivWellPathPartMgr::RivWellPathPartMgr( RimWellPath* wellPath, Rim3dView* view )
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
{
|
2017-06-16 01:56:02 -05:00
|
|
|
m_rimWellPath = wellPath;
|
2019-09-06 03:40:57 -05:00
|
|
|
m_rimView = view;
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
///
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
RivWellPathPartMgr::~RivWellPathPartMgr()
|
|
|
|
{
|
2015-12-03 12:13:12 -06:00
|
|
|
clearAllBranchData();
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
}
|
|
|
|
|
2017-01-04 01:10:02 -06:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
///
|
2017-01-04 01:10:02 -06:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
bool RivWellPathPartMgr::isWellPathWithinBoundingBox( const cvf::BoundingBox& wellPathClipBoundingBox ) const
|
2018-04-23 15:52:44 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( !m_rimWellPath->wellPathGeometry() ) return false;
|
2018-04-23 15:52:44 -05:00
|
|
|
|
2020-10-06 05:37:16 -05:00
|
|
|
const std::vector<cvf::Vec3d>& wellpathCenterLine = m_rimWellPath->wellPathGeometry()->wellPathPoints();
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( wellpathCenterLine.size() < 2 ) return false;
|
2018-04-23 15:52:44 -05:00
|
|
|
|
|
|
|
// Skip visualization if outside the domain of this case
|
|
|
|
{
|
|
|
|
cvf::Vec3d casemax = wellPathClipBoundingBox.max();
|
|
|
|
cvf::Vec3d casemin = wellPathClipBoundingBox.min();
|
|
|
|
cvf::Vec3d caseext = wellPathClipBoundingBox.extent();
|
|
|
|
|
|
|
|
// Add up to the sealevel
|
|
|
|
cvf::BoundingBox relevantWellpathBBox = wellPathClipBoundingBox;
|
2019-09-06 03:40:57 -05:00
|
|
|
relevantWellpathBBox.add( cvf::Vec3d( casemax.x(), casemax.y(), 0.0 ) );
|
2018-04-23 15:52:44 -05:00
|
|
|
|
|
|
|
// Add some sideways leeway
|
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
cvf::Vec3d addSize = 3.0 * cvf::Vec3d( caseext.x(), caseext.y(), 0.0 );
|
|
|
|
relevantWellpathBBox.add( casemax + addSize );
|
|
|
|
relevantWellpathBBox.add( casemin - addSize );
|
2018-04-23 15:52:44 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( !RigWellPath::isAnyPointInsideBoundingBox( wellpathCenterLine, relevantWellpathBBox ) )
|
2018-04-23 15:52:44 -05:00
|
|
|
{
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2020-06-22 00:27:28 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
bool RivWellPathPartMgr::isWellPathEnabled( const cvf::BoundingBox& wellPathClipBoundingBox ) const
|
|
|
|
{
|
|
|
|
RimWellPathCollection* wellPathCollection = this->wellPathCollection();
|
|
|
|
if ( !wellPathCollection ) return false;
|
|
|
|
|
|
|
|
if ( !wellPathCollection->isActive() ) return false;
|
|
|
|
|
|
|
|
if ( wellPathCollection->wellPathVisibility() == RimWellPathCollection::FORCE_ALL_OFF ) return false;
|
|
|
|
|
|
|
|
if ( wellPathCollection->wellPathVisibility() == RimWellPathCollection::ALL_ON && m_rimWellPath->showWellPath() == false )
|
|
|
|
return false;
|
|
|
|
|
|
|
|
if ( !isWellPathWithinBoundingBox( wellPathClipBoundingBox ) ) return false;
|
|
|
|
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
2018-04-23 15:52:44 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
///
|
2018-04-23 15:52:44 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
void RivWellPathPartMgr::appendStaticFracturePartsToModel( cvf::ModelBasicList* model,
|
|
|
|
const cvf::BoundingBox& wellPathClipBoundingBox )
|
2017-01-04 01:10:02 -06:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( m_rimView.isNull() ) return;
|
2018-02-05 07:47:08 -06:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
const RimEclipseView* eclView = dynamic_cast<const RimEclipseView*>( m_rimView.p() );
|
|
|
|
if ( !eclView ) return;
|
2018-02-05 06:23:14 -06:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( !m_rimWellPath || !m_rimWellPath->showWellPath() || !m_rimWellPath->fractureCollection()->isChecked() ) return;
|
2017-01-19 00:28:04 -06:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( !isWellPathWithinBoundingBox( wellPathClipBoundingBox ) ) return;
|
2018-04-23 15:52:44 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
for ( RimWellPathFracture* f : m_rimWellPath->fractureCollection()->activeFractures() )
|
2017-01-04 01:10:02 -06:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
CVF_ASSERT( f );
|
2017-01-04 01:10:02 -06:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
f->fracturePartManager()->appendGeometryPartsToModel( model, *eclView );
|
2017-01-04 01:10:02 -06:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-05-05 04:21:40 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
///
|
2017-05-05 04:21:40 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
void RivWellPathPartMgr::appendFishboneSubsPartsToModel( cvf::ModelBasicList* model,
|
|
|
|
const caf::DisplayCoordTransform* displayCoordTransform,
|
|
|
|
double characteristicCellSize )
|
2017-05-05 04:21:40 -05:00
|
|
|
{
|
2017-06-21 10:13:19 -05:00
|
|
|
if ( !m_rimWellPath || !m_rimWellPath->fishbonesCollection()->isChecked() ) return;
|
2017-05-05 04:21:40 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
for ( const auto& rimFishboneSubs : m_rimWellPath->fishbonesCollection()->activeFishbonesSubs() )
|
2017-05-05 04:21:40 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
cvf::ref<RivFishbonesSubsPartMgr> fishbSubPartMgr = new RivFishbonesSubsPartMgr( rimFishboneSubs );
|
|
|
|
fishbSubPartMgr->appendGeometryPartsToModel( model, displayCoordTransform, characteristicCellSize );
|
2017-05-05 04:21:40 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-10-10 09:57:43 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
void RivWellPathPartMgr::appendWellPathAttributesToModel( cvf::ModelBasicList* model,
|
|
|
|
const caf::DisplayCoordTransform* displayCoordTransform,
|
|
|
|
double characteristicCellSize )
|
2018-10-10 09:57:43 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( !m_rimWellPath ) return;
|
2018-10-10 09:57:43 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
RivPipeGeometryGenerator geoGenerator;
|
2018-10-10 09:57:43 -05:00
|
|
|
std::vector<RimWellPathAttribute*> attributes = m_rimWellPath->attributeCollection()->attributes();
|
2019-09-06 03:40:57 -05:00
|
|
|
|
|
|
|
for ( RimWellPathAttribute* attribute : attributes )
|
2018-10-10 09:57:43 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( attribute->isEnabled() )
|
2018-10-10 09:57:43 -05:00
|
|
|
{
|
2020-04-24 00:13:33 -05:00
|
|
|
if ( attribute->componentType() == RiaDefines::WellPathComponentType::CASING )
|
2018-10-10 09:57:43 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
double wellPathRadius = this->wellPathRadius( characteristicCellSize, this->wellPathCollection() );
|
|
|
|
double endMD = attribute->endMD();
|
|
|
|
double shoeLength = wellPathRadius;
|
|
|
|
double shoeStartMD = endMD - shoeLength;
|
2018-11-22 05:57:11 -06:00
|
|
|
|
|
|
|
std::vector<cvf::Vec3d> displayCoords;
|
2019-09-06 03:40:57 -05:00
|
|
|
displayCoords.push_back( displayCoordTransform->transformToDisplayCoord(
|
|
|
|
m_rimWellPath->wellPathGeometry()->interpolatedPointAlongWellPath( shoeStartMD ) ) );
|
|
|
|
displayCoords.push_back( displayCoordTransform->transformToDisplayCoord(
|
|
|
|
m_rimWellPath->wellPathGeometry()->interpolatedPointAlongWellPath( endMD ) ) );
|
|
|
|
displayCoords.push_back( displayCoordTransform->transformToDisplayCoord(
|
|
|
|
m_rimWellPath->wellPathGeometry()->interpolatedPointAlongWellPath( endMD ) ) );
|
2018-11-22 05:57:11 -06:00
|
|
|
|
|
|
|
std::vector<double> radii;
|
2019-09-06 03:40:57 -05:00
|
|
|
radii.push_back( wellPathRadius );
|
|
|
|
radii.push_back( wellPathRadius * 2.5 );
|
|
|
|
radii.push_back( wellPathRadius * 1.1 );
|
2018-11-22 05:57:11 -06:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
cvf::ref<RivObjectSourceInfo> objectSourceInfo = new RivObjectSourceInfo( attribute );
|
2018-11-22 05:57:11 -06:00
|
|
|
|
|
|
|
cvf::Collection<cvf::Part> parts;
|
2019-09-06 03:40:57 -05:00
|
|
|
geoGenerator.tubeWithCenterLinePartsAndVariableWidth( &parts,
|
|
|
|
displayCoords,
|
|
|
|
radii,
|
|
|
|
attribute->defaultComponentColor() );
|
|
|
|
for ( auto part : parts )
|
2018-11-22 05:57:11 -06:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
part->setSourceInfo( objectSourceInfo.p() );
|
|
|
|
model->addPart( part.p() );
|
2018-11-22 05:57:11 -06:00
|
|
|
}
|
2018-10-10 09:57:43 -05:00
|
|
|
}
|
2020-04-24 00:13:33 -05:00
|
|
|
else if ( attribute->componentType() == RiaDefines::WellPathComponentType::PACKER )
|
2018-10-11 04:33:45 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
double wellPathRadius = this->wellPathRadius( characteristicCellSize, this->wellPathCollection() );
|
|
|
|
double startMD = attribute->startMD();
|
|
|
|
double endMD = attribute->endMD();
|
2018-11-22 05:57:11 -06:00
|
|
|
|
|
|
|
std::vector<cvf::Vec3d> displayCoords;
|
2019-09-06 03:40:57 -05:00
|
|
|
displayCoords.push_back( displayCoordTransform->transformToDisplayCoord(
|
|
|
|
m_rimWellPath->wellPathGeometry()->interpolatedPointAlongWellPath( startMD ) ) );
|
|
|
|
displayCoords.push_back( displayCoordTransform->transformToDisplayCoord(
|
|
|
|
m_rimWellPath->wellPathGeometry()->interpolatedPointAlongWellPath( startMD ) ) );
|
|
|
|
displayCoords.push_back( displayCoordTransform->transformToDisplayCoord(
|
|
|
|
m_rimWellPath->wellPathGeometry()->interpolatedPointAlongWellPath( endMD ) ) );
|
|
|
|
displayCoords.push_back( displayCoordTransform->transformToDisplayCoord(
|
|
|
|
m_rimWellPath->wellPathGeometry()->interpolatedPointAlongWellPath( endMD ) ) );
|
2018-11-22 05:57:11 -06:00
|
|
|
|
|
|
|
std::vector<double> radii;
|
2019-09-06 03:40:57 -05:00
|
|
|
radii.push_back( wellPathRadius );
|
|
|
|
radii.push_back( wellPathRadius * 1.5 );
|
|
|
|
radii.push_back( wellPathRadius * 1.5 );
|
|
|
|
radii.push_back( wellPathRadius );
|
2018-11-22 05:57:11 -06:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
cvf::ref<RivObjectSourceInfo> objectSourceInfo = new RivObjectSourceInfo( attribute );
|
2018-11-22 05:57:11 -06:00
|
|
|
|
|
|
|
cvf::Collection<cvf::Part> parts;
|
2019-09-06 03:40:57 -05:00
|
|
|
geoGenerator.tubeWithCenterLinePartsAndVariableWidth( &parts,
|
|
|
|
displayCoords,
|
|
|
|
radii,
|
|
|
|
attribute->defaultComponentColor() );
|
|
|
|
for ( auto part : parts )
|
2018-11-22 05:57:11 -06:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
part->setSourceInfo( objectSourceInfo.p() );
|
|
|
|
model->addPart( part.p() );
|
2018-11-22 05:57:11 -06:00
|
|
|
}
|
2018-10-11 04:33:45 -05:00
|
|
|
}
|
|
|
|
}
|
2018-10-10 09:57:43 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-11-13 08:29:09 -06:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
void RivWellPathPartMgr::appendWellMeasurementsToModel( cvf::ModelBasicList* model,
|
|
|
|
const caf::DisplayCoordTransform* displayCoordTransform,
|
|
|
|
double characteristicCellSize )
|
|
|
|
{
|
|
|
|
if ( !m_rimWellPath ) return;
|
|
|
|
|
2019-11-27 05:05:01 -06:00
|
|
|
RimGridView* gridView = dynamic_cast<RimGridView*>( m_rimView.p() );
|
|
|
|
if ( !gridView ) return;
|
|
|
|
|
2019-11-25 05:18:39 -06:00
|
|
|
RimWellPathCollection* wellPathCollection = RimTools::wellPathCollection();
|
|
|
|
if ( !wellPathCollection ) return;
|
|
|
|
|
|
|
|
RimWellMeasurementCollection* wellMeasurementCollection = wellPathCollection->measurementCollection();
|
|
|
|
if ( !wellMeasurementCollection ) return;
|
2019-11-13 08:29:09 -06:00
|
|
|
|
2019-11-27 05:05:01 -06:00
|
|
|
if ( !gridView->measurementCollection()->isChecked() ) return;
|
2019-11-25 12:48:11 -06:00
|
|
|
|
2019-11-29 06:49:43 -06:00
|
|
|
for ( RimWellMeasurementInView* wellMeasurementInView : gridView->measurementCollection()->measurements() )
|
2019-11-13 08:29:09 -06:00
|
|
|
{
|
2019-12-03 03:22:51 -06:00
|
|
|
if ( wellMeasurementInView->isChecked() && wellMeasurementInView->isWellChecked( m_rimWellPath->name() ) )
|
2019-11-27 05:05:01 -06:00
|
|
|
{
|
2019-11-29 06:49:43 -06:00
|
|
|
std::vector<QString> measurementKinds;
|
|
|
|
measurementKinds.push_back( wellMeasurementInView->measurementKind() );
|
2019-11-27 05:05:01 -06:00
|
|
|
|
2020-01-10 09:01:02 -06:00
|
|
|
double lowerBound = 0.0;
|
|
|
|
double upperBound = 0.0;
|
|
|
|
wellMeasurementInView->rangeValues( &lowerBound, &upperBound );
|
2020-01-14 03:58:40 -06:00
|
|
|
std::vector<int> qualityFilter = wellMeasurementInView->qualityFilter();
|
|
|
|
|
2019-11-29 06:49:43 -06:00
|
|
|
std::vector<RimWellMeasurement*> wellMeasurements =
|
|
|
|
RimWellMeasurementFilter::filterMeasurements( wellMeasurementCollection->measurements(),
|
|
|
|
*wellPathCollection,
|
|
|
|
*m_rimWellPath,
|
2020-01-10 09:01:02 -06:00
|
|
|
measurementKinds,
|
|
|
|
lowerBound,
|
2020-01-14 03:58:40 -06:00
|
|
|
upperBound,
|
|
|
|
qualityFilter );
|
2019-11-29 06:49:43 -06:00
|
|
|
|
2020-01-10 09:01:02 -06:00
|
|
|
RivPipeGeometryGenerator geoGenerator;
|
2019-11-29 06:49:43 -06:00
|
|
|
for ( RimWellMeasurement* wellMeasurement : wellMeasurements )
|
|
|
|
{
|
|
|
|
double wellPathRadius = this->wellPathRadius( characteristicCellSize, this->wellPathCollection() );
|
|
|
|
double startMD = wellMeasurement->MD() - wellPathRadius * 0.5;
|
|
|
|
double endMD = wellMeasurement->MD() + wellPathRadius * 0.5;
|
|
|
|
|
2020-02-07 03:15:16 -06:00
|
|
|
double wellMeasurementRadius = this->wellMeasurementRadius( characteristicCellSize,
|
|
|
|
this->wellPathCollection(),
|
|
|
|
wellMeasurementInView );
|
|
|
|
|
2019-11-29 06:49:43 -06:00
|
|
|
std::vector<cvf::Vec3d> displayCoords;
|
|
|
|
displayCoords.push_back( displayCoordTransform->transformToDisplayCoord(
|
|
|
|
m_rimWellPath->wellPathGeometry()->interpolatedPointAlongWellPath( startMD ) ) );
|
|
|
|
displayCoords.push_back( displayCoordTransform->transformToDisplayCoord(
|
|
|
|
m_rimWellPath->wellPathGeometry()->interpolatedPointAlongWellPath( startMD ) ) );
|
|
|
|
displayCoords.push_back( displayCoordTransform->transformToDisplayCoord(
|
|
|
|
m_rimWellPath->wellPathGeometry()->interpolatedPointAlongWellPath( endMD ) ) );
|
|
|
|
displayCoords.push_back( displayCoordTransform->transformToDisplayCoord(
|
|
|
|
m_rimWellPath->wellPathGeometry()->interpolatedPointAlongWellPath( endMD ) ) );
|
|
|
|
|
|
|
|
std::vector<double> radii;
|
2020-02-07 03:15:16 -06:00
|
|
|
radii.push_back( std::min( wellPathRadius, wellMeasurementRadius ) );
|
|
|
|
radii.push_back( wellMeasurementRadius );
|
|
|
|
radii.push_back( wellMeasurementRadius );
|
|
|
|
radii.push_back( std::min( wellPathRadius, wellMeasurementRadius ) );
|
2019-11-29 06:49:43 -06:00
|
|
|
|
|
|
|
cvf::ref<RivObjectSourceInfo> objectSourceInfo = new RivObjectSourceInfo( wellMeasurement );
|
|
|
|
|
|
|
|
cvf::Collection<cvf::Part> parts;
|
|
|
|
|
|
|
|
// Use the view legend config to find color, if only one type of measurement is selected.
|
2019-12-02 15:07:49 -06:00
|
|
|
cvf::Color3f color = cvf::Color3f(
|
|
|
|
wellMeasurementInView->legendConfig()->scalarMapper()->mapToColor( wellMeasurement->value() ) );
|
2019-11-29 06:49:43 -06:00
|
|
|
|
|
|
|
geoGenerator.tubeWithCenterLinePartsAndVariableWidth( &parts, displayCoords, radii, color );
|
|
|
|
for ( auto part : parts )
|
|
|
|
{
|
|
|
|
part->setSourceInfo( objectSourceInfo.p() );
|
|
|
|
model->addPart( part.p() );
|
|
|
|
}
|
|
|
|
}
|
2019-11-13 08:29:09 -06:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-05-12 03:01:37 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
///
|
2017-05-12 03:01:37 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
void RivWellPathPartMgr::appendPerforationsToModel( cvf::ModelBasicList* model,
|
|
|
|
size_t timeStepIndex,
|
|
|
|
const caf::DisplayCoordTransform* displayCoordTransform,
|
|
|
|
double characteristicCellSize,
|
|
|
|
bool doFlatten )
|
2017-05-12 03:01:37 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( !m_rimWellPath || !m_rimWellPath->perforationIntervalCollection()->isChecked() ) return;
|
2017-05-12 03:01:37 -05:00
|
|
|
|
2018-02-05 06:23:14 -06:00
|
|
|
RimWellPathCollection* wellPathCollection = this->wellPathCollection();
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( !wellPathCollection ) return;
|
2018-02-05 06:23:14 -06:00
|
|
|
|
2017-05-12 03:01:37 -05:00
|
|
|
RigWellPath* wellPathGeometry = m_rimWellPath->wellPathGeometry();
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( !wellPathGeometry ) return;
|
2017-05-12 03:01:37 -05:00
|
|
|
|
2018-03-15 01:52:54 -05:00
|
|
|
QDateTime currentTimeStamp;
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( m_rimView )
|
2018-03-15 01:52:54 -05:00
|
|
|
{
|
2018-03-16 05:21:57 -05:00
|
|
|
RimCase* rimCase = nullptr;
|
2019-09-06 03:40:57 -05:00
|
|
|
m_rimView->firstAncestorOrThisOfType( rimCase );
|
2018-03-16 05:21:57 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( rimCase )
|
2018-03-16 05:21:57 -05:00
|
|
|
{
|
|
|
|
std::vector<QDateTime> timeStamps = rimCase->timeStepDates();
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( timeStepIndex < timeStamps.size() )
|
2018-03-16 05:21:57 -05:00
|
|
|
{
|
|
|
|
currentTimeStamp = timeStamps[timeStepIndex];
|
|
|
|
}
|
|
|
|
}
|
2018-03-15 01:52:54 -05:00
|
|
|
}
|
|
|
|
|
2017-05-12 03:01:37 -05:00
|
|
|
// Since we're using the index of measured depths to find the index of a point, ensure they're equal
|
2020-10-06 05:37:16 -05:00
|
|
|
CVF_ASSERT( wellPathGeometry->measuredDepths().size() == wellPathGeometry->wellPathPoints().size() );
|
2017-05-12 03:01:37 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
double wellPathRadius = this->wellPathRadius( characteristicCellSize, wellPathCollection );
|
2017-05-12 03:01:37 -05:00
|
|
|
double perforationRadius = wellPathRadius * 1.1;
|
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
RivPipeGeometryGenerator geoGenerator;
|
2017-05-19 08:44:32 -05:00
|
|
|
std::vector<RimPerforationInterval*> perforations;
|
2019-09-06 03:40:57 -05:00
|
|
|
m_rimWellPath->descendantsIncludingThisOfType( perforations );
|
|
|
|
for ( RimPerforationInterval* perforation : perforations )
|
2017-05-12 03:01:37 -05:00
|
|
|
{
|
2018-03-20 11:28:27 -05:00
|
|
|
using namespace std;
|
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( !perforation->isChecked() ) continue;
|
|
|
|
if ( perforation->startMD() > perforation->endMD() ) continue;
|
|
|
|
|
|
|
|
if ( !perforation->isActiveOnDate( currentTimeStamp ) ) continue;
|
2017-05-12 03:01:37 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
double horizontalLengthAlongWellPath = 0.0;
|
2018-03-20 11:28:27 -05:00
|
|
|
vector<cvf::Vec3d> perfIntervalCL;
|
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
pair<vector<cvf::Vec3d>, vector<double>> perfintervalCoordsAndMD =
|
|
|
|
wellPathGeometry->clippedPointSubset( perforation->startMD(),
|
|
|
|
perforation->endMD(),
|
|
|
|
&horizontalLengthAlongWellPath );
|
2018-03-20 11:28:27 -05:00
|
|
|
perfIntervalCL = perfintervalCoordsAndMD.first;
|
|
|
|
}
|
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( perfIntervalCL.size() < 2 ) continue;
|
2017-05-12 03:01:37 -05:00
|
|
|
|
2018-03-20 11:28:27 -05:00
|
|
|
vector<cvf::Vec3d> perfIntervalCLDiplayCS;
|
|
|
|
if ( doFlatten )
|
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
cvf::Vec3d dummy;
|
2018-03-20 11:28:27 -05:00
|
|
|
vector<cvf::Mat4d> flatningCSs =
|
2021-08-26 01:13:03 -05:00
|
|
|
RivSectionFlattener::calculateFlatteningCSsForPolyline( perfIntervalCL,
|
|
|
|
cvf::Vec3d::Z_AXIS,
|
|
|
|
{ horizontalLengthAlongWellPath,
|
|
|
|
0.0,
|
|
|
|
perfIntervalCL[0].z() },
|
|
|
|
&dummy );
|
2018-03-20 11:28:27 -05:00
|
|
|
|
|
|
|
for ( size_t cIdx = 0; cIdx < perfIntervalCL.size(); ++cIdx )
|
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
auto clpoint = perfIntervalCL[cIdx].getTransformedPoint( flatningCSs[cIdx] );
|
|
|
|
perfIntervalCLDiplayCS.push_back( displayCoordTransform->scaleToDisplaySize( clpoint ) );
|
2018-03-20 11:28:27 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
for ( cvf::Vec3d& point : perfIntervalCL )
|
2019-09-06 03:40:57 -05:00
|
|
|
{
|
|
|
|
perfIntervalCLDiplayCS.push_back( displayCoordTransform->transformToDisplayCoord( point ) );
|
2018-03-20 11:28:27 -05:00
|
|
|
}
|
|
|
|
}
|
2018-10-10 09:57:43 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
cvf::ref<RivObjectSourceInfo> objectSourceInfo = new RivObjectSourceInfo( perforation );
|
2017-09-18 09:24:29 -05:00
|
|
|
|
2018-10-10 09:57:43 -05:00
|
|
|
cvf::Collection<cvf::Part> parts;
|
2020-02-12 04:43:15 -06:00
|
|
|
geoGenerator.cylinderWithCenterLineParts( &parts, perfIntervalCLDiplayCS, cvf::Color3f::GREEN, perforationRadius );
|
2019-09-06 03:40:57 -05:00
|
|
|
for ( auto part : parts )
|
2018-10-10 09:57:43 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
part->setSourceInfo( objectSourceInfo.p() );
|
|
|
|
model->addPart( part.p() );
|
2018-10-10 09:57:43 -05:00
|
|
|
}
|
|
|
|
}
|
2017-05-12 03:01:37 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
appendPerforationValvesToModel( model, perforation, wellPathRadius, displayCoordTransform, geoGenerator );
|
2018-10-10 09:57:43 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
void RivWellPathPartMgr::appendPerforationValvesToModel( cvf::ModelBasicList* model,
|
|
|
|
RimPerforationInterval* perforation,
|
|
|
|
double wellPathRadius,
|
|
|
|
const caf::DisplayCoordTransform* displayCoordTransform,
|
|
|
|
RivPipeGeometryGenerator& geoGenerator )
|
2018-10-10 09:57:43 -05:00
|
|
|
{
|
|
|
|
// Valves
|
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
for ( RimWellPathValve* valve : perforation->valves() )
|
2017-05-12 03:01:37 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( !valve->isChecked() ) continue;
|
2018-10-10 09:57:43 -05:00
|
|
|
|
|
|
|
std::vector<double> measuredDepthsRelativeToStartMD;
|
|
|
|
std::vector<double> radii;
|
2019-09-06 03:40:57 -05:00
|
|
|
cvf::Color3f valveColor = valve->defaultComponentColor();
|
2020-04-24 00:13:33 -05:00
|
|
|
if ( valve->componentType() == RiaDefines::WellPathComponentType::ICV )
|
2018-10-10 09:57:43 -05:00
|
|
|
{
|
2020-11-06 03:46:38 -06:00
|
|
|
measuredDepthsRelativeToStartMD = { 0.0, 1.0, 1.5, 4.0, 5.0, 5.5, 8.0, 9.0 };
|
|
|
|
radii = { wellPathRadius,
|
|
|
|
wellPathRadius * 1.8,
|
|
|
|
wellPathRadius * 2.0,
|
|
|
|
wellPathRadius * 2.0,
|
|
|
|
wellPathRadius * 1.8,
|
|
|
|
wellPathRadius * 1.7,
|
|
|
|
wellPathRadius * 1.7,
|
|
|
|
wellPathRadius };
|
2019-09-06 03:40:57 -05:00
|
|
|
|
|
|
|
double startMD = valve->startMD();
|
2018-10-19 07:44:17 -05:00
|
|
|
std::vector<cvf::Vec3d> displayCoords;
|
2019-09-06 03:40:57 -05:00
|
|
|
for ( double mdRelativeToStart : measuredDepthsRelativeToStartMD )
|
2018-10-19 07:44:17 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
displayCoords.push_back( displayCoordTransform->transformToDisplayCoord(
|
|
|
|
m_rimWellPath->wellPathGeometry()->interpolatedPointAlongWellPath(
|
|
|
|
mdRelativeToStart * 0.333 * wellPathRadius + startMD ) ) );
|
2018-10-19 07:44:17 -05:00
|
|
|
}
|
2019-09-06 03:40:57 -05:00
|
|
|
|
|
|
|
cvf::ref<RivObjectSourceInfo> objectSourceInfo = new RivObjectSourceInfo( valve );
|
2018-10-10 09:57:43 -05:00
|
|
|
|
2018-10-19 07:44:17 -05:00
|
|
|
cvf::Collection<cvf::Part> parts;
|
2019-09-06 03:40:57 -05:00
|
|
|
geoGenerator.tubeWithCenterLinePartsAndVariableWidth( &parts, displayCoords, radii, valveColor );
|
|
|
|
for ( auto part : parts )
|
2018-10-10 09:57:43 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
part->setSourceInfo( objectSourceInfo.p() );
|
|
|
|
model->addPart( part.p() );
|
2018-10-10 09:57:43 -05:00
|
|
|
}
|
2018-10-19 07:44:17 -05:00
|
|
|
}
|
2020-04-24 00:13:33 -05:00
|
|
|
else if ( valve->componentType() == RiaDefines::WellPathComponentType::ICD ||
|
|
|
|
valve->componentType() == RiaDefines::WellPathComponentType::AICD )
|
2018-10-19 07:44:17 -05:00
|
|
|
{
|
|
|
|
std::vector<double> valveLocations = valve->valveLocations();
|
2019-09-06 03:40:57 -05:00
|
|
|
for ( double startMD : valveLocations )
|
2018-10-10 09:57:43 -05:00
|
|
|
{
|
2018-10-19 07:44:17 -05:00
|
|
|
int size = 16;
|
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
measuredDepthsRelativeToStartMD.resize( size );
|
|
|
|
radii.resize( size );
|
|
|
|
for ( int i = 0; i < size; i += 2 )
|
2018-10-10 09:57:43 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
measuredDepthsRelativeToStartMD[i] = double( i / 2 );
|
|
|
|
measuredDepthsRelativeToStartMD[i + 1] = double( i / 2 + 0.5 );
|
2018-10-10 09:57:43 -05:00
|
|
|
}
|
2019-09-06 03:40:57 -05:00
|
|
|
radii[0] = wellPathRadius;
|
|
|
|
bool inner = false;
|
|
|
|
int nInners = 0;
|
|
|
|
for ( int i = 1; i < size - 1; i += 2 )
|
2018-10-10 09:57:43 -05:00
|
|
|
{
|
2020-04-24 00:13:33 -05:00
|
|
|
if ( inner && valve->componentType() == RiaDefines::WellPathComponentType::AICD && nInners > 0 )
|
2018-10-19 07:44:17 -05:00
|
|
|
{
|
|
|
|
radii[i + 1] = radii[i] = wellPathRadius * 1.7;
|
2019-09-06 03:40:57 -05:00
|
|
|
nInners = 0;
|
2018-10-19 07:44:17 -05:00
|
|
|
}
|
2019-09-06 03:40:57 -05:00
|
|
|
else if ( inner )
|
2018-10-19 07:44:17 -05:00
|
|
|
{
|
|
|
|
radii[i + 1] = radii[i] = wellPathRadius * 1.9;
|
|
|
|
nInners++;
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
radii[i + 1] = radii[i] = wellPathRadius * 2.0;
|
|
|
|
}
|
|
|
|
inner = !inner;
|
2018-10-10 09:57:43 -05:00
|
|
|
}
|
2018-10-19 07:44:17 -05:00
|
|
|
radii[size - 1] = wellPathRadius;
|
|
|
|
|
|
|
|
std::vector<cvf::Vec3d> displayCoords;
|
2019-09-06 03:40:57 -05:00
|
|
|
for ( double mdRelativeToStart : measuredDepthsRelativeToStartMD )
|
2018-10-10 09:57:43 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
displayCoords.push_back( displayCoordTransform->transformToDisplayCoord(
|
|
|
|
m_rimWellPath->wellPathGeometry()->interpolatedPointAlongWellPath(
|
|
|
|
mdRelativeToStart * 0.333 * wellPathRadius + startMD ) ) );
|
2018-10-10 09:57:43 -05:00
|
|
|
}
|
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
cvf::ref<RivObjectSourceInfo> objectSourceInfo = new RivObjectSourceInfo( valve );
|
2018-10-10 09:57:43 -05:00
|
|
|
|
2018-10-19 07:44:17 -05:00
|
|
|
cvf::Collection<cvf::Part> parts;
|
2019-09-06 03:40:57 -05:00
|
|
|
geoGenerator.tubeWithCenterLinePartsAndVariableWidth( &parts, displayCoords, radii, valveColor );
|
|
|
|
for ( auto part : parts )
|
2018-10-19 07:44:17 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
part->setSourceInfo( objectSourceInfo.p() );
|
|
|
|
model->addPart( part.p() );
|
2018-10-19 07:44:17 -05:00
|
|
|
}
|
|
|
|
}
|
2018-10-10 09:57:43 -05:00
|
|
|
}
|
2017-05-12 03:01:37 -05:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2018-03-12 05:07:46 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
///
|
2018-03-12 05:07:46 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
void RivWellPathPartMgr::appendVirtualTransmissibilitiesToModel( cvf::ModelBasicList* model,
|
|
|
|
size_t timeStepIndex,
|
|
|
|
const caf::DisplayCoordTransform* displayCoordTransform,
|
|
|
|
double characteristicCellSize )
|
2018-03-12 05:07:46 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
RimEclipseView* eclView = dynamic_cast<RimEclipseView*>( m_rimView.p() );
|
|
|
|
if ( !eclView ) return;
|
2018-03-12 05:07:46 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( !eclView->isVirtualConnectionFactorGeometryVisible() ) return;
|
2018-03-12 05:07:46 -05:00
|
|
|
|
2018-03-14 03:35:48 -05:00
|
|
|
RimEclipseCase* eclipseCase = nullptr;
|
2019-09-06 03:40:57 -05:00
|
|
|
eclView->firstAncestorOrThisOfType( eclipseCase );
|
|
|
|
if ( !eclipseCase ) return;
|
2018-03-12 05:07:46 -05:00
|
|
|
|
2020-02-12 04:43:15 -06:00
|
|
|
const RigVirtualPerforationTransmissibilities* trans =
|
|
|
|
eclipseCase->computeAndGetVirtualPerforationTransmissibilities();
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( trans )
|
2018-03-12 05:12:39 -05:00
|
|
|
{
|
2020-02-12 04:43:15 -06:00
|
|
|
m_wellConnectionFactorPartMgr =
|
|
|
|
new RivWellConnectionFactorPartMgr( m_rimWellPath, eclView->virtualPerforationResult() );
|
2018-03-12 05:07:46 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
m_wellConnectionFactorPartMgr->appendDynamicGeometryPartsToModel( model, timeStepIndex );
|
2018-03-12 05:12:39 -05:00
|
|
|
}
|
2018-03-12 05:07:46 -05:00
|
|
|
}
|
|
|
|
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2015-06-12 02:05:55 -05:00
|
|
|
/// The pipe geometry needs to be rebuilt on scale change to keep the pipes round
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
void RivWellPathPartMgr::buildWellPathParts( const caf::DisplayCoordTransform* displayCoordTransform,
|
|
|
|
double characteristicCellSize,
|
|
|
|
const cvf::BoundingBox& wellPathClipBoundingBox,
|
|
|
|
bool doFlatten )
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
{
|
2017-05-12 03:01:37 -05:00
|
|
|
RimWellPathCollection* wellPathCollection = this->wellPathCollection();
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( !wellPathCollection ) return;
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
|
|
|
|
RigWellPath* wellPathGeometry = m_rimWellPath->wellPathGeometry();
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( !wellPathGeometry ) return;
|
2013-06-26 05:01:53 -05:00
|
|
|
|
2020-10-16 00:36:29 -05:00
|
|
|
std::vector<cvf::Vec3d> wellpathCenterLine = wellPathGeometry->uniqueWellPathPoints();
|
2019-09-06 03:40:57 -05:00
|
|
|
|
|
|
|
if ( wellpathCenterLine.size() < 2 ) return;
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
|
2015-12-03 12:13:12 -06:00
|
|
|
clearAllBranchData();
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
double wellPathRadius = this->wellPathRadius( characteristicCellSize, wellPathCollection );
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
|
2018-03-20 07:12:20 -05:00
|
|
|
std::vector<cvf::Vec3d> clippedWellPathCenterLine;
|
|
|
|
|
2018-04-23 03:30:40 -05:00
|
|
|
// Generate the well path geometry as a line and pipe structure
|
|
|
|
|
|
|
|
m_pipeGeomGenerator = new RivPipeGeometryGenerator;
|
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
m_pipeGeomGenerator->setRadius( wellPathRadius );
|
|
|
|
m_pipeGeomGenerator->setCrossSectionVertexCount( wellPathCollection->wellPathCrossSectionVertexCount() );
|
2018-04-23 03:30:40 -05:00
|
|
|
|
2018-03-21 07:56:24 -05:00
|
|
|
double horizontalLengthAlongWellToClipPoint = 0.0;
|
2019-09-06 03:40:57 -05:00
|
|
|
size_t idxToFirstVisibleSegment = 0;
|
2018-03-20 07:12:20 -05:00
|
|
|
if ( wellPathCollection->wellPathClip )
|
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
double maxZClipHeight = wellPathClipBoundingBox.max().z() + wellPathCollection->wellPathClipZDistance;
|
|
|
|
clippedWellPathCenterLine = RigWellPath::clipPolylineStartAboveZ( wellpathCenterLine,
|
2018-03-20 07:12:20 -05:00
|
|
|
maxZClipHeight,
|
2018-03-21 07:56:24 -05:00
|
|
|
&horizontalLengthAlongWellToClipPoint,
|
2019-09-06 03:40:57 -05:00
|
|
|
&idxToFirstVisibleSegment );
|
2018-03-20 07:12:20 -05:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
clippedWellPathCenterLine = wellpathCenterLine;
|
2018-03-20 07:12:20 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
if ( clippedWellPathCenterLine.size() < 2 ) return;
|
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
cvf::ref<cvf::Vec3dArray> cvfCoords = new cvf::Vec3dArray( clippedWellPathCenterLine.size() );
|
2018-03-20 07:12:20 -05:00
|
|
|
|
|
|
|
// Scale the centerline coordinates using the Z-scale transform of the grid and correct for the display offset.
|
|
|
|
|
|
|
|
if ( doFlatten )
|
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
cvf::Vec3d dummy;
|
2018-03-20 07:12:20 -05:00
|
|
|
std::vector<cvf::Mat4d> flatningCSs =
|
2021-08-26 01:13:03 -05:00
|
|
|
RivSectionFlattener::calculateFlatteningCSsForPolyline( clippedWellPathCenterLine,
|
|
|
|
cvf::Vec3d::Z_AXIS,
|
|
|
|
{ horizontalLengthAlongWellToClipPoint,
|
|
|
|
0.0,
|
|
|
|
clippedWellPathCenterLine[0].z() },
|
|
|
|
&dummy );
|
2018-03-20 07:12:20 -05:00
|
|
|
|
|
|
|
for ( size_t cIdx = 0; cIdx < cvfCoords->size(); ++cIdx )
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
auto clpoint = clippedWellPathCenterLine[cIdx].getTransformedPoint( flatningCSs[cIdx] );
|
|
|
|
( *cvfCoords )[cIdx] = displayCoordTransform->scaleToDisplaySize( clpoint );
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
}
|
2018-03-20 07:12:20 -05:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
for ( size_t cIdx = 0; cIdx < cvfCoords->size(); ++cIdx )
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
( *cvfCoords )[cIdx] = displayCoordTransform->transformToDisplayCoord( clippedWellPathCenterLine[cIdx] );
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
}
|
2018-03-20 07:12:20 -05:00
|
|
|
}
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
m_pipeGeomGenerator->setFirstVisibleSegmentIndex( idxToFirstVisibleSegment );
|
|
|
|
m_pipeGeomGenerator->setPipeCenterCoords( cvfCoords.p() );
|
|
|
|
m_surfaceDrawable = m_pipeGeomGenerator->createPipeSurface();
|
2018-03-20 07:12:20 -05:00
|
|
|
m_centerLineDrawable = m_pipeGeomGenerator->createCenterLine();
|
2017-06-19 15:15:28 -05:00
|
|
|
|
2018-03-20 07:12:20 -05:00
|
|
|
if ( m_surfaceDrawable.notNull() )
|
|
|
|
{
|
|
|
|
m_surfacePart = new cvf::Part;
|
2021-09-02 09:00:48 -05:00
|
|
|
m_surfacePart->setName( "RivWellPathPartMgr::surface" );
|
2019-09-06 03:40:57 -05:00
|
|
|
m_surfacePart->setDrawable( m_surfaceDrawable.p() );
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
RivWellPathSourceInfo* sourceInfo = new RivWellPathSourceInfo( m_rimWellPath, m_pipeGeomGenerator.p() );
|
|
|
|
m_surfacePart->setSourceInfo( sourceInfo );
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
caf::SurfaceEffectGenerator surfaceGen( cvf::Color4f( m_rimWellPath->wellPathColor() ), caf::PO_1 );
|
|
|
|
cvf::ref<cvf::Effect> eff = surfaceGen.generateCachedEffect();
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
m_surfacePart->setEffect( eff.p() );
|
2018-03-20 07:12:20 -05:00
|
|
|
}
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
|
2018-03-20 07:12:20 -05:00
|
|
|
if ( m_centerLineDrawable.notNull() )
|
|
|
|
{
|
|
|
|
m_centerLinePart = new cvf::Part;
|
2021-09-02 09:00:48 -05:00
|
|
|
m_centerLinePart->setName( "RivWellPathPartMgr::centerLinePart" );
|
2019-09-06 03:40:57 -05:00
|
|
|
m_centerLinePart->setDrawable( m_centerLineDrawable.p() );
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
caf::MeshEffectGenerator gen( m_rimWellPath->wellPathColor() );
|
|
|
|
cvf::ref<cvf::Effect> eff = gen.generateCachedEffect();
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
m_centerLinePart->setEffect( eff.p() );
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
}
|
|
|
|
|
2021-02-26 07:27:59 -06:00
|
|
|
// Generate label with well-path name at a position that is slightly offset towards the end of the well path
|
|
|
|
// This is to avoid overlap between well path laterals.
|
2019-09-06 03:40:57 -05:00
|
|
|
cvf::Vec3d textPosition = cvfCoords->get( 0 );
|
2021-02-26 07:27:59 -06:00
|
|
|
cvf::Vec3d tangent = ( cvfCoords->get( cvfCoords->size() - 1 ) - cvfCoords->get( 0 ) ).getNormalized();
|
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
textPosition.z() += 2.2 * characteristicCellSize;
|
2021-02-26 07:27:59 -06:00
|
|
|
textPosition += tangent * 2.2 * characteristicCellSize;
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
|
2020-02-12 04:43:15 -06:00
|
|
|
if ( wellPathCollection->showWellPathLabel() && m_rimWellPath->showWellPathLabel() && !m_rimWellPath->name().isEmpty() )
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
{
|
2019-05-06 03:36:05 -05:00
|
|
|
cvf::Font* font = RiaGuiApplication::instance()->defaultWellLabelFont();
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
|
|
|
|
cvf::ref<cvf::DrawableText> drawableText = new cvf::DrawableText;
|
2019-09-06 03:40:57 -05:00
|
|
|
drawableText->setFont( font );
|
|
|
|
drawableText->setCheckPosVisible( false );
|
|
|
|
drawableText->setDrawBorder( false );
|
|
|
|
drawableText->setDrawBackground( false );
|
|
|
|
drawableText->setVerticalAlignment( cvf::TextDrawer::CENTER );
|
|
|
|
drawableText->setTextColor( wellPathCollection->wellPathLabelColor() );
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
cvf::String cvfString = cvfqt::Utils::toString( m_rimWellPath->name() );
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
cvf::Vec3f textCoord( textPosition );
|
|
|
|
drawableText->addText( cvfString, textCoord );
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
|
|
|
|
cvf::ref<cvf::Part> part = new cvf::Part;
|
2019-09-06 03:40:57 -05:00
|
|
|
part->setName( "RivWellHeadPartMgr: text " + cvfString );
|
|
|
|
part->setDrawable( drawableText.p() );
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
|
|
|
|
cvf::ref<cvf::Effect> eff = new cvf::Effect;
|
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
part->setEffect( eff.p() );
|
|
|
|
part->setPriority( RivPartPriority::Text );
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
part->setSourceInfo( new RivTextLabelSourceInfo( m_rimWellPath, cvfString, textCoord ) );
|
2019-01-15 03:53:54 -06:00
|
|
|
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
m_wellLabelPart = part;
|
|
|
|
}
|
2021-04-13 00:22:56 -05:00
|
|
|
|
|
|
|
auto modeledWellPath = dynamic_cast<RimModeledWellPath*>( m_rimWellPath.p() );
|
|
|
|
if ( modeledWellPath )
|
|
|
|
{
|
|
|
|
bool showWellTargetSpheres = modeledWellPath->geometryDefinition()->showSpheres();
|
|
|
|
|
|
|
|
if ( showWellTargetSpheres )
|
|
|
|
{
|
|
|
|
auto geoDef = modeledWellPath->geometryDefinition();
|
|
|
|
|
|
|
|
auto sphereColor = geoDef->sphereColor();
|
|
|
|
double sphereRadiusFactor = geoDef->sphereRadiusFactor();
|
|
|
|
|
|
|
|
cvf::ref<cvf::Vec3fArray> vertices = new cvf::Vec3fArray;
|
|
|
|
cvf::ref<cvf::Vec3fArray> vecRes = new cvf::Vec3fArray;
|
|
|
|
cvf::ref<cvf::Color3fArray> colors = new cvf::Color3fArray;
|
|
|
|
|
|
|
|
auto wellTargets = geoDef->activeWellTargets();
|
|
|
|
|
|
|
|
size_t pointCount = wellTargets.size();
|
|
|
|
vertices->reserve( pointCount );
|
|
|
|
vecRes->reserve( pointCount );
|
|
|
|
colors->reserve( pointCount );
|
|
|
|
|
|
|
|
for ( const auto target : wellTargets )
|
|
|
|
{
|
|
|
|
auto domainCoord = target->targetPointXYZ() + modeledWellPath->geometryDefinition()->anchorPointXyz();
|
|
|
|
auto displayCoord = displayCoordTransform->transformToDisplayCoord( domainCoord );
|
|
|
|
vertices->add( cvf::Vec3f( displayCoord ) );
|
|
|
|
vecRes->add( cvf::Vec3f::X_AXIS );
|
|
|
|
colors->add( sphereColor );
|
|
|
|
}
|
|
|
|
|
2021-08-13 09:48:33 -05:00
|
|
|
cvf::ref<RivDrawableSpheres> vectorDrawable;
|
2021-04-13 00:22:56 -05:00
|
|
|
if ( RiaGuiApplication::instance()->useShaders() )
|
|
|
|
{
|
2021-08-13 09:48:33 -05:00
|
|
|
vectorDrawable = new RivDrawableSpheres( "u_transformationMatrix", "u_color" );
|
2021-04-13 00:22:56 -05:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2021-08-13 09:48:33 -05:00
|
|
|
vectorDrawable = new RivDrawableSpheres();
|
2021-04-13 00:22:56 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
vectorDrawable->setVectors( vertices.p(), vecRes.p() );
|
|
|
|
vectorDrawable->setColors( colors.p() );
|
|
|
|
|
|
|
|
double cellRadius = 15.0;
|
|
|
|
auto eclipseView = dynamic_cast<RimEclipseView*>( m_rimView.p() );
|
|
|
|
if ( eclipseView )
|
|
|
|
{
|
|
|
|
double characteristicCellSize = eclipseView->mainGrid()->characteristicIJCellSize();
|
|
|
|
cellRadius = sphereRadiusFactor * characteristicCellSize;
|
|
|
|
}
|
|
|
|
|
|
|
|
cvf::GeometryBuilderTriangles builder;
|
|
|
|
cvf::GeometryUtils::createSphere( cellRadius, 15, 15, &builder );
|
|
|
|
vectorDrawable->setGlyph( builder.trianglesUShort().p(), builder.vertices().p() );
|
2021-08-26 01:13:03 -05:00
|
|
|
vectorDrawable->setRadius( cellRadius );
|
|
|
|
vectorDrawable->setCenterCoords( vertices.p() );
|
2021-08-13 09:48:33 -05:00
|
|
|
|
2021-04-13 00:22:56 -05:00
|
|
|
cvf::ref<cvf::Part> part = new cvf::Part;
|
|
|
|
part->setName( "RivWellPathPartMgr_WellTargetSpheres" );
|
|
|
|
part->setDrawable( vectorDrawable.p() );
|
|
|
|
|
|
|
|
part->setEffect( new cvf::Effect() );
|
|
|
|
|
2021-08-13 09:48:33 -05:00
|
|
|
auto sourceInfo = new RivObjectSourceInfo( geoDef );
|
|
|
|
part->setSourceInfo( sourceInfo );
|
|
|
|
|
2021-04-13 00:22:56 -05:00
|
|
|
m_spherePart = part;
|
|
|
|
}
|
|
|
|
}
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
}
|
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
///
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
void RivWellPathPartMgr::appendStaticGeometryPartsToModel( cvf::ModelBasicList* model,
|
|
|
|
const caf::DisplayCoordTransform* displayCoordTransform,
|
|
|
|
double characteristicCellSize,
|
|
|
|
const cvf::BoundingBox& wellPathClipBoundingBox )
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
{
|
2020-06-22 00:27:28 -05:00
|
|
|
if ( !isWellPathEnabled( wellPathClipBoundingBox ) ) return;
|
2018-04-23 15:52:44 -05:00
|
|
|
|
2017-06-21 10:13:19 -05:00
|
|
|
// The pipe geometry needs to be rebuilt on scale change to keep the pipes round
|
2019-09-06 03:40:57 -05:00
|
|
|
buildWellPathParts( displayCoordTransform, characteristicCellSize, wellPathClipBoundingBox, false );
|
2017-02-01 07:54:02 -06:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( m_surfacePart.notNull() )
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
model->addPart( m_surfacePart.p() );
|
2015-12-03 12:13:12 -06:00
|
|
|
}
|
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( m_centerLinePart.notNull() )
|
2015-12-03 12:13:12 -06:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
model->addPart( m_centerLinePart.p() );
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
}
|
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( m_wellLabelPart.notNull() )
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
model->addPart( m_wellLabelPart.p() );
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
}
|
2017-01-04 01:10:02 -06:00
|
|
|
|
2021-04-13 00:22:56 -05:00
|
|
|
if ( m_spherePart.notNull() )
|
|
|
|
{
|
|
|
|
model->addPart( m_spherePart.p() );
|
|
|
|
}
|
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
appendFishboneSubsPartsToModel( model, displayCoordTransform, characteristicCellSize );
|
|
|
|
appendWellPathAttributesToModel( model, displayCoordTransform, characteristicCellSize );
|
2021-09-09 10:34:27 -05:00
|
|
|
appendWellIntegrityIntervalsToModel( model, displayCoordTransform, characteristicCellSize );
|
2018-09-03 07:52:00 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
RimGridView* gridView = dynamic_cast<RimGridView*>( m_rimView.p() );
|
2020-06-22 00:27:28 -05:00
|
|
|
if ( gridView )
|
|
|
|
{
|
|
|
|
m_3dWellLogPlanePartMgr = new Riv3dWellLogPlanePartMgr( m_rimWellPath, gridView );
|
|
|
|
m_3dWellLogPlanePartMgr->appendPlaneToModel( model, displayCoordTransform, wellPathClipBoundingBox, true );
|
|
|
|
}
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
}
|
|
|
|
|
2018-03-20 07:12:20 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
///
|
2018-03-20 07:12:20 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
void RivWellPathPartMgr::appendFlattenedStaticGeometryPartsToModel( cvf::ModelBasicList* model,
|
|
|
|
const caf::DisplayCoordTransform* displayCoordTransform,
|
|
|
|
double characteristicCellSize,
|
|
|
|
const cvf::BoundingBox& wellPathClipBoundingBox )
|
2018-03-20 07:12:20 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( !isWellPathWithinBoundingBox( wellPathClipBoundingBox ) ) return;
|
2018-04-23 15:52:44 -05:00
|
|
|
|
2018-03-20 07:12:20 -05:00
|
|
|
// The pipe geometry needs to be rebuilt on scale change to keep the pipes round
|
2019-09-06 03:40:57 -05:00
|
|
|
buildWellPathParts( displayCoordTransform, characteristicCellSize, wellPathClipBoundingBox, true );
|
2018-03-20 07:12:20 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( m_surfacePart.notNull() )
|
2018-03-20 07:12:20 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
model->addPart( m_surfacePart.p() );
|
2018-03-20 07:12:20 -05:00
|
|
|
}
|
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( m_centerLinePart.notNull() )
|
2018-03-20 07:12:20 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
model->addPart( m_centerLinePart.p() );
|
2018-03-20 07:12:20 -05:00
|
|
|
}
|
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( m_wellLabelPart.notNull() )
|
2018-03-20 07:12:20 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
model->addPart( m_wellLabelPart.p() );
|
|
|
|
}
|
2021-04-13 00:22:56 -05:00
|
|
|
|
2021-08-26 01:13:03 -05:00
|
|
|
/*
|
|
|
|
// TODO: Currently not supported.
|
|
|
|
// Require coordinate transformations of the spheres similar to RivWellPathPartMgr::buildWellPathParts
|
|
|
|
// https://github.com/OPM/ResInsight/issues/7891
|
|
|
|
//
|
|
|
|
if ( m_spherePart.notNull() )
|
|
|
|
{
|
|
|
|
model->addPart( m_spherePart.p() );
|
|
|
|
}
|
|
|
|
*/
|
2018-03-20 07:12:20 -05:00
|
|
|
}
|
|
|
|
|
2015-12-03 12:13:12 -06:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
///
|
2015-12-03 12:13:12 -06:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
void RivWellPathPartMgr::appendDynamicGeometryPartsToModel( cvf::ModelBasicList* model,
|
|
|
|
size_t timeStepIndex,
|
|
|
|
const caf::DisplayCoordTransform* displayCoordTransform,
|
|
|
|
double characteristicCellSize,
|
|
|
|
const cvf::BoundingBox& wellPathClipBoundingBox )
|
Added visualization of Well Paths in reservoir views.
Added PDM objects for a list of well paths (RimWellPathCollection) and for individual well paths (RimWellPath).
RimWellPathCollection uses RivWellPathCollectionPartMgr to generate visualization parts for each well path in the collection.
RimWellPath handles geometry defined in RigWellPath, and RivWellPathPartMgr is used to generate visualization parts. The well path visualization parts are generated by reusing RivPipeGeometryGenerator (also used for well pipes).
Added features:
- Select Open Well Paths in File menu to open one or more well path files, file format supported is Statoil JSON format.
- Each well path has a label showing the name, and the PDM window will show additional info (Id, Source System, UTM Zone, Update Date and User, Survey Type, File Path).
- Possible to turn on / off visibility, set thickness, set color for individual well paths.
- List of well paths including specified parameters/settings will be stored in project file.
- Possible to clip all well paths at a specified distance to the reservoir as this is the relevant area to see, and if showing whole well path it may be problematic for auto zoom etc.
p4#: 21651
2013-05-16 05:59:01 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
CVF_ASSERT( model );
|
2015-12-03 12:13:12 -06:00
|
|
|
|
2020-06-22 00:27:28 -05:00
|
|
|
bool showWellPath = isWellPathEnabled( wellPathClipBoundingBox );
|
2020-02-07 02:04:39 -06:00
|
|
|
|
|
|
|
if ( showWellPath )
|
2018-03-20 05:29:46 -05:00
|
|
|
{
|
2020-02-07 02:04:39 -06:00
|
|
|
// Only show perforations and virtual transmissibilities when well path is shown
|
|
|
|
appendPerforationsToModel( model, timeStepIndex, displayCoordTransform, characteristicCellSize, false );
|
|
|
|
appendVirtualTransmissibilitiesToModel( model, timeStepIndex, displayCoordTransform, characteristicCellSize );
|
2018-03-20 05:29:46 -05:00
|
|
|
}
|
2017-05-05 04:21:40 -05:00
|
|
|
|
2020-02-07 02:04:39 -06:00
|
|
|
// Well measurements visibility is independent of well path visibility
|
2019-11-27 14:37:27 -06:00
|
|
|
appendWellMeasurementsToModel( model, displayCoordTransform, characteristicCellSize );
|
2018-06-20 03:31:03 -05:00
|
|
|
|
2020-02-10 03:06:35 -06:00
|
|
|
if ( showWellPath )
|
2018-09-03 07:52:00 -05:00
|
|
|
{
|
2020-02-10 03:06:35 -06:00
|
|
|
RimGridView* gridView = dynamic_cast<RimGridView*>( m_rimView.p() );
|
2020-06-22 00:27:28 -05:00
|
|
|
if ( gridView )
|
2020-02-10 03:06:35 -06:00
|
|
|
{
|
2020-06-22 00:27:28 -05:00
|
|
|
if ( m_3dWellLogPlanePartMgr.isNull() )
|
|
|
|
{
|
|
|
|
m_3dWellLogPlanePartMgr = new Riv3dWellLogPlanePartMgr( m_rimWellPath, gridView );
|
|
|
|
}
|
|
|
|
m_3dWellLogPlanePartMgr->appendPlaneToModel( model, displayCoordTransform, wellPathClipBoundingBox, false );
|
2020-02-10 03:06:35 -06:00
|
|
|
}
|
2018-09-03 07:52:00 -05:00
|
|
|
}
|
2017-02-01 07:54:02 -06:00
|
|
|
}
|
|
|
|
|
2018-03-20 11:28:27 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
///
|
2018-03-20 11:28:27 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
void RivWellPathPartMgr::appendFlattenedDynamicGeometryPartsToModel( cvf::ModelBasicList* model,
|
|
|
|
size_t timeStepIndex,
|
|
|
|
const caf::DisplayCoordTransform* displayCoordTransform,
|
|
|
|
double characteristicCellSize,
|
|
|
|
const cvf::BoundingBox& wellPathClipBoundingBox )
|
2018-03-20 11:28:27 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
CVF_ASSERT( model );
|
2018-03-20 11:28:27 -05:00
|
|
|
|
|
|
|
RimWellPathCollection* wellPathCollection = this->wellPathCollection();
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( !wellPathCollection ) return;
|
2018-03-20 11:28:27 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( m_rimWellPath.isNull() ) return;
|
2018-03-20 11:28:27 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( !isWellPathWithinBoundingBox( wellPathClipBoundingBox ) ) return;
|
2018-04-23 15:52:44 -05:00
|
|
|
|
2019-09-06 03:40:57 -05:00
|
|
|
appendPerforationsToModel( model, timeStepIndex, displayCoordTransform, characteristicCellSize, true );
|
2018-03-20 11:28:27 -05:00
|
|
|
}
|
|
|
|
|
2015-12-03 12:13:12 -06:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
///
|
2015-12-03 12:13:12 -06:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
void RivWellPathPartMgr::clearAllBranchData()
|
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
m_pipeGeomGenerator = nullptr;
|
|
|
|
m_surfacePart = nullptr;
|
|
|
|
m_surfaceDrawable = nullptr;
|
|
|
|
m_centerLinePart = nullptr;
|
2018-02-06 04:09:22 -06:00
|
|
|
m_centerLineDrawable = nullptr;
|
2019-09-06 03:40:57 -05:00
|
|
|
m_wellLabelPart = nullptr;
|
2021-04-13 00:22:56 -05:00
|
|
|
m_spherePart = nullptr;
|
2015-12-03 12:13:12 -06:00
|
|
|
}
|
2015-12-04 05:05:06 -06:00
|
|
|
|
2017-05-12 03:01:37 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
///
|
2017-05-12 03:01:37 -05:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2018-06-26 03:12:49 -05:00
|
|
|
RimWellPathCollection* RivWellPathPartMgr::wellPathCollection() const
|
2017-05-12 03:01:37 -05:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
if ( !m_rimWellPath ) return nullptr;
|
2017-05-12 03:01:37 -05:00
|
|
|
|
|
|
|
RimWellPathCollection* wellPathCollection = nullptr;
|
2019-09-06 03:40:57 -05:00
|
|
|
m_rimWellPath->firstAncestorOrThisOfType( wellPathCollection );
|
2017-05-12 03:01:37 -05:00
|
|
|
|
|
|
|
return wellPathCollection;
|
|
|
|
}
|
|
|
|
|
2018-02-05 06:23:14 -06:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
///
|
2018-02-05 06:23:14 -06:00
|
|
|
//--------------------------------------------------------------------------------------------------
|
2019-09-06 03:40:57 -05:00
|
|
|
double RivWellPathPartMgr::wellPathRadius( double characteristicCellSize, RimWellPathCollection* wellPathCollection )
|
2018-02-05 06:23:14 -06:00
|
|
|
{
|
2019-09-06 03:40:57 -05:00
|
|
|
return wellPathCollection->wellPathRadiusScaleFactor() * m_rimWellPath->wellPathRadiusScaleFactor() *
|
|
|
|
characteristicCellSize;
|
2018-02-05 06:23:14 -06:00
|
|
|
}
|
2020-02-07 03:15:16 -06:00
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
double RivWellPathPartMgr::wellMeasurementRadius( double characteristicCellSize,
|
|
|
|
const RimWellPathCollection* wellPathCollection,
|
|
|
|
const RimWellMeasurementInView* wellMeasurementInView )
|
|
|
|
{
|
|
|
|
return wellPathCollection->wellPathRadiusScaleFactor() * wellMeasurementInView->radiusScaleFactor() *
|
|
|
|
characteristicCellSize;
|
|
|
|
}
|
2021-09-09 10:34:27 -05:00
|
|
|
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
///
|
|
|
|
//--------------------------------------------------------------------------------------------------
|
|
|
|
void RivWellPathPartMgr::appendWellIntegrityIntervalsToModel( cvf::ModelBasicList* model,
|
|
|
|
const caf::DisplayCoordTransform* displayCoordTransform,
|
|
|
|
double characteristicCellSize )
|
|
|
|
{
|
|
|
|
if ( !m_rimWellPath ) return;
|
|
|
|
|
|
|
|
RimWellPathCollection* wellPathCollection = this->wellPathCollection();
|
|
|
|
if ( !wellPathCollection ) return;
|
|
|
|
|
|
|
|
RigWellPath* wellPathGeometry = m_rimWellPath->wellPathGeometry();
|
|
|
|
if ( !wellPathGeometry ) return;
|
|
|
|
|
|
|
|
// Since we're using the index of measured depths to find the index of a point, ensure they're equal
|
|
|
|
CVF_ASSERT( wellPathGeometry->measuredDepths().size() == wellPathGeometry->wellPathPoints().size() );
|
|
|
|
|
|
|
|
double wellPathRadius = this->wellPathRadius( characteristicCellSize, wellPathCollection );
|
|
|
|
double wiaIntervalRadius = wellPathRadius * 1.15;
|
|
|
|
|
|
|
|
RivPipeGeometryGenerator geoGenerator;
|
|
|
|
|
|
|
|
for ( auto wiaModel : m_rimWellPath->wellIASettingsCollection()->settings() )
|
|
|
|
{
|
|
|
|
if ( !wiaModel->isChecked() ) continue;
|
|
|
|
if ( wiaModel->startMD() > wiaModel->endMD() ) continue;
|
|
|
|
|
|
|
|
double horizontalLengthAlongWellPath = 0.0;
|
|
|
|
std::vector<cvf::Vec3d> intervalCL;
|
|
|
|
{
|
|
|
|
std::pair<std::vector<cvf::Vec3d>, std::vector<double>> intervalCoordsAndMD =
|
|
|
|
wellPathGeometry->clippedPointSubset( wiaModel->startMD(), wiaModel->endMD(), &horizontalLengthAlongWellPath );
|
|
|
|
intervalCL = intervalCoordsAndMD.first;
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( intervalCL.size() < 2 ) continue;
|
|
|
|
|
|
|
|
std::vector<cvf::Vec3d> intervalCLDisplayCS;
|
|
|
|
|
|
|
|
for ( cvf::Vec3d& point : intervalCL )
|
|
|
|
{
|
|
|
|
intervalCLDisplayCS.push_back( displayCoordTransform->transformToDisplayCoord( point ) );
|
|
|
|
}
|
|
|
|
cvf::ref<RivObjectSourceInfo> objectSourceInfo = new RivObjectSourceInfo( wiaModel );
|
|
|
|
|
|
|
|
cvf::Collection<cvf::Part> parts;
|
|
|
|
geoGenerator.cylinderWithCenterLineParts( &parts, intervalCLDisplayCS, cvf::Color3f::ORCHID, wiaIntervalRadius );
|
|
|
|
for ( auto& part : parts )
|
|
|
|
{
|
|
|
|
part->setSourceInfo( objectSourceInfo.p() );
|
|
|
|
model->addPart( part.p() );
|
|
|
|
}
|
|
|
|
|
|
|
|
if ( wiaModel->showBox() )
|
|
|
|
{
|
|
|
|
const auto& vertices = wiaModel->modelBoxVertices();
|
|
|
|
|
|
|
|
std::vector<cvf::Vec3f> transformedVertices;
|
|
|
|
|
|
|
|
for ( auto& v : vertices )
|
|
|
|
{
|
|
|
|
transformedVertices.push_back( cvf::Vec3f( displayCoordTransform->transformToDisplayCoord( v ) ) );
|
|
|
|
}
|
|
|
|
|
|
|
|
cvf::ref<cvf::Part> boxpart =
|
|
|
|
RivBoxGeometryGenerator::createBoxFromVertices( transformedVertices, cvf::Color3f::ORCHID );
|
|
|
|
boxpart->setSourceInfo( objectSourceInfo.p() );
|
|
|
|
model->addPart( boxpart.p() );
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|