mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#5001 Add visualization for RimWellMeasurement.
This commit is contained in:
parent
d266e44f1f
commit
37ab75bc2a
@ -20,6 +20,7 @@
|
|||||||
|
|
||||||
#include "RivWellPathPartMgr.h"
|
#include "RivWellPathPartMgr.h"
|
||||||
|
|
||||||
|
#include "RiaColorTables.h"
|
||||||
#include "RiaGuiApplication.h"
|
#include "RiaGuiApplication.h"
|
||||||
|
|
||||||
#include "RigEclipseCaseData.h"
|
#include "RigEclipseCaseData.h"
|
||||||
@ -36,6 +37,8 @@
|
|||||||
#include "RimFishbonesMultipleSubs.h"
|
#include "RimFishbonesMultipleSubs.h"
|
||||||
#include "RimPerforationCollection.h"
|
#include "RimPerforationCollection.h"
|
||||||
#include "RimPerforationInterval.h"
|
#include "RimPerforationInterval.h"
|
||||||
|
#include "RimWellMeasurement.h"
|
||||||
|
#include "RimWellMeasurementCollection.h"
|
||||||
#include "RimWellPath.h"
|
#include "RimWellPath.h"
|
||||||
#include "RimWellPathAttribute.h"
|
#include "RimWellPathAttribute.h"
|
||||||
#include "RimWellPathAttributeCollection.h"
|
#include "RimWellPathAttributeCollection.h"
|
||||||
@ -66,7 +69,7 @@
|
|||||||
#include "cvfFont.h"
|
#include "cvfFont.h"
|
||||||
#include "cvfModelBasicList.h"
|
#include "cvfModelBasicList.h"
|
||||||
#include "cvfPart.h"
|
#include "cvfPart.h"
|
||||||
#include "cvfScalarMapperDiscreteLinear.h"
|
#include "cvfScalarMapperContinuousLinear.h"
|
||||||
#include "cvfTransform.h"
|
#include "cvfTransform.h"
|
||||||
#include "cvfqtUtils.h"
|
#include "cvfqtUtils.h"
|
||||||
|
|
||||||
@ -249,6 +252,81 @@ void RivWellPathPartMgr::appendWellPathAttributesToModel( cvf::ModelBasicList*
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cvf::Color3f RivWellPathPartMgr::mapWellMeasurementToColor( const QString& measurementKind, double value )
|
||||||
|
{
|
||||||
|
if ( measurementKind == "TH" ) return cvf::Color3f::RED;
|
||||||
|
if ( measurementKind == "LE" ) return cvf::Color3f::BLUE;
|
||||||
|
if ( measurementKind == "BA" ) return cvf::Color3f::GREEN;
|
||||||
|
if ( measurementKind == "CORE" ) return cvf::Color3f::BLACK;
|
||||||
|
|
||||||
|
QStringList rangeBasedMeasurements;
|
||||||
|
rangeBasedMeasurements << "XLOT"
|
||||||
|
<< "LOT"
|
||||||
|
<< "FIT"
|
||||||
|
<< "MCF"
|
||||||
|
<< "MNF"
|
||||||
|
<< "PPG";
|
||||||
|
if ( rangeBasedMeasurements.contains( measurementKind ) )
|
||||||
|
{
|
||||||
|
cvf::ScalarMapperContinuousLinear mapper;
|
||||||
|
mapper.setColors( RiaColorTables::normalPaletteColors().color3ubArray() );
|
||||||
|
mapper.setRange( 1.0, 3.0 );
|
||||||
|
cvf::Color3ub color = mapper.mapToColor( value );
|
||||||
|
return cvf::Color3f( color );
|
||||||
|
}
|
||||||
|
|
||||||
|
return cvf::Color3f::RED;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
void RivWellPathPartMgr::appendWellMeasurementsToModel( cvf::ModelBasicList* model,
|
||||||
|
const caf::DisplayCoordTransform* displayCoordTransform,
|
||||||
|
double characteristicCellSize )
|
||||||
|
{
|
||||||
|
if ( !m_rimWellPath ) return;
|
||||||
|
|
||||||
|
if ( !m_rimWellPath->measurementCollection()->isChecked() ) return;
|
||||||
|
|
||||||
|
RivPipeGeometryGenerator geoGenerator;
|
||||||
|
std::vector<RimWellMeasurement*> wellMeasurements = m_rimWellPath->measurementCollection()->measurements();
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
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;
|
||||||
|
radii.push_back( wellPathRadius );
|
||||||
|
radii.push_back( wellPathRadius * 2.5 );
|
||||||
|
radii.push_back( wellPathRadius * 2.5 );
|
||||||
|
radii.push_back( wellPathRadius );
|
||||||
|
|
||||||
|
cvf::ref<RivObjectSourceInfo> objectSourceInfo = new RivObjectSourceInfo( wellMeasurement );
|
||||||
|
|
||||||
|
cvf::Collection<cvf::Part> parts;
|
||||||
|
cvf::Color3f color = mapWellMeasurementToColor( wellMeasurement->kind(), wellMeasurement->value() );
|
||||||
|
geoGenerator.tubeWithCenterLinePartsAndVariableWidth( &parts, displayCoords, radii, color );
|
||||||
|
for ( auto part : parts )
|
||||||
|
{
|
||||||
|
part->setSourceInfo( objectSourceInfo.p() );
|
||||||
|
model->addPart( part.p() );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
@ -711,6 +789,7 @@ void RivWellPathPartMgr::appendStaticGeometryPartsToModel( cvf::ModelBasicList*
|
|||||||
appendFishboneSubsPartsToModel( model, displayCoordTransform, characteristicCellSize );
|
appendFishboneSubsPartsToModel( model, displayCoordTransform, characteristicCellSize );
|
||||||
appendImportedFishbonesToModel( model, displayCoordTransform, characteristicCellSize );
|
appendImportedFishbonesToModel( model, displayCoordTransform, characteristicCellSize );
|
||||||
appendWellPathAttributesToModel( model, displayCoordTransform, characteristicCellSize );
|
appendWellPathAttributesToModel( model, displayCoordTransform, characteristicCellSize );
|
||||||
|
appendWellMeasurementsToModel( model, displayCoordTransform, characteristicCellSize );
|
||||||
|
|
||||||
RimGridView* gridView = dynamic_cast<RimGridView*>( m_rimView.p() );
|
RimGridView* gridView = dynamic_cast<RimGridView*>( m_rimView.p() );
|
||||||
if ( !gridView ) return;
|
if ( !gridView ) return;
|
||||||
|
@ -93,6 +93,10 @@ private:
|
|||||||
const caf::DisplayCoordTransform* displayCoordTransform,
|
const caf::DisplayCoordTransform* displayCoordTransform,
|
||||||
double characteristicCellSize );
|
double characteristicCellSize );
|
||||||
|
|
||||||
|
void appendWellMeasurementsToModel( cvf::ModelBasicList* model,
|
||||||
|
const caf::DisplayCoordTransform* displayCoordTransform,
|
||||||
|
double characteristicCellSize );
|
||||||
|
|
||||||
void appendImportedFishbonesToModel( cvf::ModelBasicList* model,
|
void appendImportedFishbonesToModel( cvf::ModelBasicList* model,
|
||||||
const caf::DisplayCoordTransform* displayCoordTransform,
|
const caf::DisplayCoordTransform* displayCoordTransform,
|
||||||
double characteristicCellSize );
|
double characteristicCellSize );
|
||||||
@ -125,6 +129,8 @@ private:
|
|||||||
|
|
||||||
bool isWellPathWithinBoundingBox( const cvf::BoundingBox& wellPathClipBoundingBox ) const;
|
bool isWellPathWithinBoundingBox( const cvf::BoundingBox& wellPathClipBoundingBox ) const;
|
||||||
|
|
||||||
|
static cvf::Color3f mapWellMeasurementToColor( const QString& measurementKind, double value );
|
||||||
|
|
||||||
private:
|
private:
|
||||||
caf::PdmPointer<RimWellPath> m_rimWellPath;
|
caf::PdmPointer<RimWellPath> m_rimWellPath;
|
||||||
caf::PdmPointer<Rim3dView> m_rimView;
|
caf::PdmPointer<Rim3dView> m_rimView;
|
||||||
|
Loading…
Reference in New Issue
Block a user