mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#2591 3D well log curves: Add grid line along path
This commit is contained in:
parent
595bf2aa97
commit
cc5f4b2ec6
@ -800,8 +800,6 @@ void RivIntersectionPartMgr::appendWellPipePartsToModel(cvf::ModelBasicList* mod
|
|||||||
|
|
||||||
if (!wellPath) return;
|
if (!wellPath) return;
|
||||||
|
|
||||||
RigWellPath* wellPathGeometry = wellPath->wellPathGeometry();
|
|
||||||
|
|
||||||
RimGridView* gridView = nullptr;
|
RimGridView* gridView = nullptr;
|
||||||
m_rimCrossSection->firstAncestorOrThisOfTypeAsserted(gridView);
|
m_rimCrossSection->firstAncestorOrThisOfTypeAsserted(gridView);
|
||||||
double cellSize = gridView->ownerCase()->characteristicCellSize();
|
double cellSize = gridView->ownerCase()->characteristicCellSize();
|
||||||
|
@ -18,6 +18,10 @@
|
|||||||
|
|
||||||
#include "Riv3dWellLogCurveGeomertyGenerator.h"
|
#include "Riv3dWellLogCurveGeomertyGenerator.h"
|
||||||
|
|
||||||
|
#include "RimCase.h"
|
||||||
|
#include "RimGridView.h"
|
||||||
|
#include "RimWellPath.h"
|
||||||
|
|
||||||
#include "RigCurveDataTools.h"
|
#include "RigCurveDataTools.h"
|
||||||
#include "RigWellPath.h"
|
#include "RigWellPath.h"
|
||||||
|
|
||||||
@ -66,9 +70,9 @@ cvf::ref<cvf::DrawableGeo> Riv3dWellLogCurveGeometryGenerator::createGrid(const
|
|||||||
{
|
{
|
||||||
CVF_ASSERT(gridIntervalSize > 0);
|
CVF_ASSERT(gridIntervalSize > 0);
|
||||||
|
|
||||||
if (m_wellPathGeometry.isNull()) return nullptr;
|
if (!wellPathGeometry()) return nullptr;
|
||||||
|
|
||||||
std::vector<cvf::Vec3d> wellPathPoints = m_wellPathGeometry->m_wellPathPoints;
|
std::vector<cvf::Vec3d> wellPathPoints = wellPathGeometry()->m_wellPathPoints;
|
||||||
if (wellPathPoints.empty()) return nullptr;
|
if (wellPathPoints.empty()) return nullptr;
|
||||||
|
|
||||||
const cvf::Vec3d globalDirection = (wellPathPoints.back() - wellPathPoints.front()).getNormalized();
|
const cvf::Vec3d globalDirection = (wellPathPoints.back() - wellPathPoints.front()).getNormalized();
|
||||||
@ -77,14 +81,14 @@ cvf::ref<cvf::DrawableGeo> Riv3dWellLogCurveGeometryGenerator::createGrid(const
|
|||||||
std::vector<cvf::Vec3d> pointNormals;
|
std::vector<cvf::Vec3d> pointNormals;
|
||||||
std::vector<cvf::Vec3d> gridPoints;
|
std::vector<cvf::Vec3d> gridPoints;
|
||||||
|
|
||||||
double firstMd = m_wellPathGeometry->m_measuredDepths.front();
|
double firstMd = wellPathGeometry()->m_measuredDepths.front();
|
||||||
double lastMd = m_wellPathGeometry->m_measuredDepths.back();
|
double lastMd = wellPathGeometry()->m_measuredDepths.back();
|
||||||
if (m_wellPathGeometry->m_measuredDepths.empty()) return nullptr;
|
if (wellPathGeometry()->m_measuredDepths.empty()) return nullptr;
|
||||||
|
|
||||||
double md = firstMd;
|
double md = firstMd;
|
||||||
while (md <= lastMd)
|
while (md <= lastMd)
|
||||||
{
|
{
|
||||||
cvf::Vec3d point = m_wellPathGeometry->interpolatedPointAlongWellPath(md);
|
cvf::Vec3d point = wellPathGeometry()->interpolatedPointAlongWellPath(md);
|
||||||
gridPoints.push_back(point);
|
gridPoints.push_back(point);
|
||||||
md += gridIntervalSize;
|
md += gridIntervalSize;
|
||||||
}
|
}
|
||||||
@ -100,15 +104,41 @@ cvf::ref<cvf::DrawableGeo> Riv3dWellLogCurveGeometryGenerator::createGrid(const
|
|||||||
|
|
||||||
cvf::uint counter = 0;
|
cvf::uint counter = 0;
|
||||||
|
|
||||||
|
double offsetFromWellPathCenter = wellPathRadius()*1.2;
|
||||||
|
double gridWidth = 100;
|
||||||
|
|
||||||
|
// Normal lines
|
||||||
for (size_t i = 0; i < pointNormals.size(); i++)
|
for (size_t i = 0; i < pointNormals.size(); i++)
|
||||||
{
|
{
|
||||||
vertices.push_back(cvf::Vec3f(displayCoordTransform->transformToDisplayCoord(gridPoints[i])));
|
vertices.push_back(cvf::Vec3f(displayCoordTransform->transformToDisplayCoord(gridPoints[i] + pointNormals[i] * offsetFromWellPathCenter)));
|
||||||
vertices.push_back(cvf::Vec3f(displayCoordTransform->transformToDisplayCoord(gridPoints[i] + pointNormals[i] * 100)));
|
vertices.push_back(cvf::Vec3f(displayCoordTransform->transformToDisplayCoord(gridPoints[i] + pointNormals[i] * (offsetFromWellPathCenter+gridWidth))));
|
||||||
|
|
||||||
indices.push_back(counter++);
|
indices.push_back(counter++);
|
||||||
indices.push_back(counter++);
|
indices.push_back(counter++);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<cvf::Vec3d> wellPathSegmentNormals = calculateWellPathSegmentNormals(drawPlane);
|
||||||
|
|
||||||
|
// Line along and close to well
|
||||||
|
for (size_t i = 0; i < wellPathPoints.size(); i++)
|
||||||
|
{
|
||||||
|
vertices.push_back(cvf::Vec3f(displayCoordTransform->transformToDisplayCoord(wellPathPoints[i] + wellPathSegmentNormals[i] * offsetFromWellPathCenter)));
|
||||||
|
indices.push_back(counter);
|
||||||
|
indices.push_back(++counter);
|
||||||
|
}
|
||||||
|
indices.pop_back();
|
||||||
|
indices.pop_back();
|
||||||
|
|
||||||
|
// Line along and far away from well
|
||||||
|
for (size_t i = 0; i < wellPathPoints.size(); i++)
|
||||||
|
{
|
||||||
|
vertices.push_back(cvf::Vec3f(displayCoordTransform->transformToDisplayCoord(wellPathPoints[i] + wellPathSegmentNormals[i] * (offsetFromWellPathCenter + gridWidth))));
|
||||||
|
indices.push_back(counter);
|
||||||
|
indices.push_back(++counter);
|
||||||
|
}
|
||||||
|
indices.pop_back();
|
||||||
|
indices.pop_back();
|
||||||
|
|
||||||
cvf::ref<cvf::PrimitiveSetIndexedUInt> indexedUInt = new cvf::PrimitiveSetIndexedUInt(cvf::PrimitiveType::PT_LINES);
|
cvf::ref<cvf::PrimitiveSetIndexedUInt> indexedUInt = new cvf::PrimitiveSetIndexedUInt(cvf::PrimitiveType::PT_LINES);
|
||||||
cvf::ref<cvf::UIntArray> indexArray = new cvf::UIntArray(indices);
|
cvf::ref<cvf::UIntArray> indexArray = new cvf::UIntArray(indices);
|
||||||
|
|
||||||
@ -131,7 +161,7 @@ void Riv3dWellLogCurveGeometryGenerator::createCurveVerticesAndIndices(const Rim
|
|||||||
std::vector<cvf::Vec3f>* vertices,
|
std::vector<cvf::Vec3f>* vertices,
|
||||||
std::vector<cvf::uint>* indices) const
|
std::vector<cvf::uint>* indices) const
|
||||||
{
|
{
|
||||||
if (m_wellPathGeometry.isNull()) return;
|
if (!wellPathGeometry()) return;
|
||||||
|
|
||||||
std::vector<double> resultValues;
|
std::vector<double> resultValues;
|
||||||
std::vector<double> mds;
|
std::vector<double> mds;
|
||||||
@ -141,14 +171,14 @@ void Riv3dWellLogCurveGeometryGenerator::createCurveVerticesAndIndices(const Rim
|
|||||||
CVF_ASSERT(resultValues.size() == mds.size());
|
CVF_ASSERT(resultValues.size() == mds.size());
|
||||||
|
|
||||||
cvf::Vec3d globalDirection =
|
cvf::Vec3d globalDirection =
|
||||||
(m_wellPathGeometry->m_wellPathPoints.back() - m_wellPathGeometry->m_wellPathPoints.front()).getNormalized();
|
(wellPathGeometry()->m_wellPathPoints.back() - wellPathGeometry()->m_wellPathPoints.front()).getNormalized();
|
||||||
|
|
||||||
std::vector<cvf::Vec3d> interpolatedWellPathPoints;
|
std::vector<cvf::Vec3d> interpolatedWellPathPoints;
|
||||||
interpolatedWellPathPoints.reserve(mds.size());
|
interpolatedWellPathPoints.reserve(mds.size());
|
||||||
|
|
||||||
for (double md : mds)
|
for (double md : mds)
|
||||||
{
|
{
|
||||||
interpolatedWellPathPoints.push_back(m_wellPathGeometry->interpolatedPointAlongWellPath(md));
|
interpolatedWellPathPoints.push_back(wellPathGeometry()->interpolatedPointAlongWellPath(md));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<cvf::Vec3d> pointNormals = calculatePointNormals(rim3dWellLogCurve->drawPlane(), interpolatedWellPathPoints);
|
std::vector<cvf::Vec3d> pointNormals = calculatePointNormals(rim3dWellLogCurve->drawPlane(), interpolatedWellPathPoints);
|
||||||
@ -168,8 +198,8 @@ void Riv3dWellLogCurveGeometryGenerator::createCurveVerticesAndIndices(const Rim
|
|||||||
vertices->resize(interpolatedWellPathPoints.size());
|
vertices->resize(interpolatedWellPathPoints.size());
|
||||||
|
|
||||||
double range = maxResult - minResult;
|
double range = maxResult - minResult;
|
||||||
double factor = 60.0 / range;
|
double offset = wellPathRadius()*1.2;
|
||||||
double offset = 30.0;
|
double factor = 2 * offset / range;
|
||||||
|
|
||||||
if (minResult < 0)
|
if (minResult < 0)
|
||||||
{
|
{
|
||||||
@ -210,7 +240,7 @@ std::vector<cvf::Vec3d> Riv3dWellLogCurveGeometryGenerator::calculatePointNormal
|
|||||||
{
|
{
|
||||||
std::vector<cvf::Vec3d> pointNormals;
|
std::vector<cvf::Vec3d> pointNormals;
|
||||||
|
|
||||||
if (m_wellPathGeometry.isNull()) return pointNormals;
|
if (!wellPathGeometry()) return pointNormals;
|
||||||
pointNormals.reserve(points.size());
|
pointNormals.reserve(points.size());
|
||||||
|
|
||||||
const cvf::Vec3d globalDirection = (points.back() - points.front()).getNormalized();
|
const cvf::Vec3d globalDirection = (points.back() - points.front()).getNormalized();
|
||||||
@ -220,7 +250,7 @@ std::vector<cvf::Vec3d> Riv3dWellLogCurveGeometryGenerator::calculatePointNormal
|
|||||||
{
|
{
|
||||||
cvf::Vec3d p1 = cvf::Vec3d::UNDEFINED;
|
cvf::Vec3d p1 = cvf::Vec3d::UNDEFINED;
|
||||||
cvf::Vec3d p2 = cvf::Vec3d::UNDEFINED;
|
cvf::Vec3d p2 = cvf::Vec3d::UNDEFINED;
|
||||||
m_wellPathGeometry->twoClosestPoints(point, &p1, &p2);
|
wellPathGeometry()->twoClosestPoints(point, &p1, &p2);
|
||||||
if (p1.isUndefined() || p2.isUndefined()) continue;
|
if (p1.isUndefined() || p2.isUndefined()) continue;
|
||||||
|
|
||||||
cvf::Vec3d vecAlongPath = (p2 - p1).getNormalized();
|
cvf::Vec3d vecAlongPath = (p2 - p1).getNormalized();
|
||||||
@ -266,3 +296,89 @@ std::vector<cvf::Vec3d> Riv3dWellLogCurveGeometryGenerator::calculatePointNormal
|
|||||||
|
|
||||||
return pointNormals;
|
return pointNormals;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
std::vector<cvf::Vec3d> Riv3dWellLogCurveGeometryGenerator::calculateWellPathSegmentNormals(Rim3dWellLogCurve::DrawPlane drawPlane) const
|
||||||
|
{
|
||||||
|
std::vector<cvf::Vec3d> wellSegmentNormals;
|
||||||
|
|
||||||
|
if (!wellPathGeometry()) return wellSegmentNormals;
|
||||||
|
|
||||||
|
std::vector<cvf::Vec3d> wellPathPoints = wellPathGeometry()->m_wellPathPoints;
|
||||||
|
|
||||||
|
const cvf::Vec3d globalDirection = (wellPathPoints.back() - wellPathPoints.front()).getNormalized();
|
||||||
|
const cvf::Vec3d up(0, 0, 1);
|
||||||
|
|
||||||
|
cvf::Vec3d normal;
|
||||||
|
|
||||||
|
for (size_t i = 0; i < wellPathPoints.size()-1; i++)
|
||||||
|
{
|
||||||
|
cvf::Vec3d p1 = wellPathPoints[i];
|
||||||
|
cvf::Vec3d p2 = wellPathPoints[i + 1];
|
||||||
|
|
||||||
|
if (p1.isUndefined() || p2.isUndefined()) continue;
|
||||||
|
|
||||||
|
cvf::Vec3d vecAlongPath = (p2 - p1).getNormalized();
|
||||||
|
|
||||||
|
double dotProduct = up * vecAlongPath;
|
||||||
|
|
||||||
|
cvf::Vec3d Ex;
|
||||||
|
|
||||||
|
if (cvf::Math::abs(dotProduct) > 0.7071)
|
||||||
|
{
|
||||||
|
Ex = globalDirection;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
Ex = vecAlongPath;
|
||||||
|
}
|
||||||
|
|
||||||
|
cvf::Vec3d Ey = (up ^ Ex).getNormalized();
|
||||||
|
cvf::Vec3d Ez = (Ex ^ Ey).getNormalized();
|
||||||
|
|
||||||
|
|
||||||
|
switch (drawPlane)
|
||||||
|
{
|
||||||
|
case Rim3dWellLogCurve::HORIZONTAL_LEFT:
|
||||||
|
normal = -Ey;
|
||||||
|
break;
|
||||||
|
case Rim3dWellLogCurve::HORIZONTAL_RIGHT:
|
||||||
|
normal = Ey;
|
||||||
|
break;
|
||||||
|
case Rim3dWellLogCurve::VERTICAL_ABOVE:
|
||||||
|
normal = Ez;
|
||||||
|
break;
|
||||||
|
case Rim3dWellLogCurve::VERTICAL_BELOW:
|
||||||
|
normal = -Ez;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
wellSegmentNormals.push_back(normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
wellSegmentNormals.push_back(normal);
|
||||||
|
|
||||||
|
return wellSegmentNormals;
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
double Riv3dWellLogCurveGeometryGenerator::wellPathRadius() const
|
||||||
|
{
|
||||||
|
double cellSize = m_gridView->ownerCase()->characteristicCellSize();
|
||||||
|
|
||||||
|
return m_wellPath->wellPathRadius(cellSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
///
|
||||||
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
const RigWellPath* Riv3dWellLogCurveGeometryGenerator::wellPathGeometry() const
|
||||||
|
{
|
||||||
|
return m_wellPath->wellPathGeometry();
|
||||||
|
}
|
||||||
|
@ -35,12 +35,14 @@ class DisplayCoordTransform;
|
|||||||
}
|
}
|
||||||
|
|
||||||
class RigWellPath;
|
class RigWellPath;
|
||||||
|
class RimGridView;
|
||||||
|
class RimWellPath;
|
||||||
|
|
||||||
class Riv3dWellLogCurveGeometryGenerator : public cvf::Object
|
class Riv3dWellLogCurveGeometryGenerator : public cvf::Object
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Riv3dWellLogCurveGeometryGenerator(RigWellPath* wellPathGeometry)
|
Riv3dWellLogCurveGeometryGenerator(RimWellPath* wellPath, RimGridView* gridView)
|
||||||
: m_wellPathGeometry(wellPathGeometry){};
|
: m_wellPath(wellPath), m_gridView(gridView) {};
|
||||||
|
|
||||||
cvf::ref<cvf::DrawableGeo> createCurveLine(const caf::DisplayCoordTransform* displayCoordTransform,
|
cvf::ref<cvf::DrawableGeo> createCurveLine(const caf::DisplayCoordTransform* displayCoordTransform,
|
||||||
const Rim3dWellLogCurve* rim3dWellLogCurve) const;
|
const Rim3dWellLogCurve* rim3dWellLogCurve) const;
|
||||||
@ -58,6 +60,13 @@ private:
|
|||||||
std::vector<cvf::Vec3d> calculatePointNormals(Rim3dWellLogCurve::DrawPlane drawPlane,
|
std::vector<cvf::Vec3d> calculatePointNormals(Rim3dWellLogCurve::DrawPlane drawPlane,
|
||||||
const std::vector<cvf::Vec3d>& points) const;
|
const std::vector<cvf::Vec3d>& points) const;
|
||||||
|
|
||||||
|
std::vector<cvf::Vec3d> calculateWellPathSegmentNormals(Rim3dWellLogCurve::DrawPlane drawPlane) const;
|
||||||
|
|
||||||
|
double wellPathRadius() const;
|
||||||
|
|
||||||
|
const RigWellPath* wellPathGeometry() const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
cvf::ref<RigWellPath> m_wellPathGeometry;
|
caf::PdmPointer<RimWellPath> m_wellPath;
|
||||||
|
caf::PdmPointer<RimGridView> m_gridView;
|
||||||
};
|
};
|
||||||
|
@ -18,7 +18,8 @@
|
|||||||
|
|
||||||
#include "Riv3dWellLogPlanePartMgr.h"
|
#include "Riv3dWellLogPlanePartMgr.h"
|
||||||
|
|
||||||
#include "RigWellPath.h"
|
#include "RimGridView.h"
|
||||||
|
#include "RimWellPath.h"
|
||||||
|
|
||||||
#include "Riv3dWellLogCurveGeomertyGenerator.h"
|
#include "Riv3dWellLogCurveGeomertyGenerator.h"
|
||||||
|
|
||||||
@ -33,8 +34,8 @@
|
|||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
Riv3dWellLogPlanePartMgr::Riv3dWellLogPlanePartMgr(RigWellPath* wellPathGeometry)
|
Riv3dWellLogPlanePartMgr::Riv3dWellLogPlanePartMgr(RimWellPath* wellPath, RimGridView* gridView)
|
||||||
:m_wellPathGeometry(wellPathGeometry)
|
:m_wellPath(wellPath), m_gridView(gridView)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,9 +47,9 @@ void Riv3dWellLogPlanePartMgr::append3dWellLogCurvesToModel(cvf::ModelBasicList*
|
|||||||
std::vector<Rim3dWellLogCurve*> rim3dWellLogCurves)
|
std::vector<Rim3dWellLogCurve*> rim3dWellLogCurves)
|
||||||
{
|
{
|
||||||
if (rim3dWellLogCurves.empty()) return;
|
if (rim3dWellLogCurves.empty()) return;
|
||||||
if (m_wellPathGeometry.isNull()) return;
|
if (m_wellPath.isNull()) return;
|
||||||
|
|
||||||
m_3dWellLogCurveGeometryGenerator = new Riv3dWellLogCurveGeometryGenerator(m_wellPathGeometry.p());
|
m_3dWellLogCurveGeometryGenerator = new Riv3dWellLogCurveGeometryGenerator(m_wellPath.p(), m_gridView);
|
||||||
|
|
||||||
for (Rim3dWellLogCurve* rim3dWellLogCurve : rim3dWellLogCurves)
|
for (Rim3dWellLogCurve* rim3dWellLogCurve : rim3dWellLogCurves)
|
||||||
{
|
{
|
||||||
|
@ -40,13 +40,14 @@ namespace caf
|
|||||||
class DisplayCoordTransform;
|
class DisplayCoordTransform;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
class RimGridView;
|
||||||
|
class RimWellPath;
|
||||||
class Riv3dWellLogCurveGeometryGenerator;
|
class Riv3dWellLogCurveGeometryGenerator;
|
||||||
class RigWellPath;
|
|
||||||
|
|
||||||
class Riv3dWellLogPlanePartMgr : public cvf::Object
|
class Riv3dWellLogPlanePartMgr : public cvf::Object
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Riv3dWellLogPlanePartMgr(RigWellPath* wellPathGeometry);
|
Riv3dWellLogPlanePartMgr(RimWellPath* wellPath, RimGridView* gridView);
|
||||||
|
|
||||||
void append3dWellLogCurvesToModel(cvf::ModelBasicList* model,
|
void append3dWellLogCurvesToModel(cvf::ModelBasicList* model,
|
||||||
const caf::DisplayCoordTransform* displayCoordTransform,
|
const caf::DisplayCoordTransform* displayCoordTransform,
|
||||||
@ -59,5 +60,7 @@ private:
|
|||||||
cvf::ref<cvf::Part> createPart(cvf::Drawable* drawable, cvf::Effect* effect);
|
cvf::ref<cvf::Part> createPart(cvf::Drawable* drawable, cvf::Effect* effect);
|
||||||
private:
|
private:
|
||||||
cvf::ref<Riv3dWellLogCurveGeometryGenerator> m_3dWellLogCurveGeometryGenerator;
|
cvf::ref<Riv3dWellLogCurveGeometryGenerator> m_3dWellLogCurveGeometryGenerator;
|
||||||
cvf::ref<RigWellPath> m_wellPathGeometry;
|
|
||||||
};
|
caf::PdmPointer<RimWellPath> m_wellPath;
|
||||||
|
caf::PdmPointer<RimGridView> m_gridView;
|
||||||
|
};
|
||||||
|
@ -471,7 +471,10 @@ void RivWellPathPartMgr::appendDynamicGeometryPartsToModel(cvf::ModelBasicList*
|
|||||||
if (!m_rimWellPath->rim3dWellLogCurveCollection()) return;
|
if (!m_rimWellPath->rim3dWellLogCurveCollection()) return;
|
||||||
if (!m_rimWellPath->rim3dWellLogCurveCollection()->showPlot()) return;
|
if (!m_rimWellPath->rim3dWellLogCurveCollection()->showPlot()) return;
|
||||||
|
|
||||||
m_3dWellLogCurvePartMgr = new Riv3dWellLogPlanePartMgr(m_rimWellPath->wellPathGeometry());
|
RimGridView* gridView = dynamic_cast<RimGridView*>(m_rimView.p());
|
||||||
|
if (!gridView) return;
|
||||||
|
|
||||||
|
m_3dWellLogCurvePartMgr = new Riv3dWellLogPlanePartMgr(m_rimWellPath, gridView);
|
||||||
m_3dWellLogCurvePartMgr->append3dWellLogCurvesToModel(model, displayCoordTransform, m_rimWellPath->vectorOf3dWellLogCurves());
|
m_3dWellLogCurvePartMgr->append3dWellLogCurvesToModel(model, displayCoordTransform, m_rimWellPath->vectorOf3dWellLogCurves());
|
||||||
|
|
||||||
if (m_rimWellPath->rim3dWellLogCurveCollection()->showGrid())
|
if (m_rimWellPath->rim3dWellLogCurveCollection()->showGrid())
|
||||||
|
Loading…
Reference in New Issue
Block a user