#2591 3D well log curve: Add option to place at the side of the well

This commit is contained in:
Rebecca Cox 2018-03-22 12:54:31 +01:00
parent ef1cb3468b
commit 7024ee045c
4 changed files with 83 additions and 13 deletions

View File

@ -89,7 +89,10 @@ void Riv3dWellLogPlanePartMgr::append3dWellLogCurvesToModel(cvf::ModelBasicList*
if (m_wellPath.isNull()) return; if (m_wellPath.isNull()) return;
if (!m_wellPath->rim3dWellLogCurveCollection()) return; if (!m_wellPath->rim3dWellLogCurveCollection()) return;
if (m_wellPath->rim3dWellLogCurveCollection()->vectorOf3dWellLogCurves().empty()) return; if (m_wellPath->rim3dWellLogCurveCollection()->vectorOf3dWellLogCurves().empty()) return;
const Rim3dWellLogCurveCollection* curveCollection = m_wellPath->rim3dWellLogCurveCollection();
Rim3dWellLogCurveCollection::PlanePosition planePosition = curveCollection->planePosition();
for (Rim3dWellLogCurve* rim3dWellLogCurve : m_wellPath->rim3dWellLogCurveCollection()->vectorOf3dWellLogCurves()) for (Rim3dWellLogCurve* rim3dWellLogCurve : m_wellPath->rim3dWellLogCurveCollection()->vectorOf3dWellLogCurves())
{ {
if (!rim3dWellLogCurve->isShowingCurve()) continue; if (!rim3dWellLogCurve->isShowingCurve()) continue;
@ -98,8 +101,14 @@ void Riv3dWellLogPlanePartMgr::append3dWellLogCurvesToModel(cvf::ModelBasicList*
std::vector<double> resultMds; std::vector<double> resultMds;
rim3dWellLogCurve->curveValuesAndMds(&resultValues, &resultMds); rim3dWellLogCurve->curveValuesAndMds(&resultValues, &resultMds);
cvf::ref<cvf::Drawable> curveDrawable = m_3dWellLogCurveGeometryGenerator->createCurveLine( cvf::ref<cvf::Drawable> curveDrawable =
displayCoordTransform, wellPathClipBoundingBox, resultValues, resultMds, planeAngle(rim3dWellLogCurve->drawPlane()), wellPathCenterToPlotStartOffset(), planeWidth()); m_3dWellLogCurveGeometryGenerator->createCurveLine(displayCoordTransform,
wellPathClipBoundingBox,
resultValues,
resultMds,
planeAngle(rim3dWellLogCurve->drawPlane()),
wellPathCenterToPlotStartOffset(planePosition),
planeWidth());
if (curveDrawable.isNull() || !curveDrawable->boundingBox().isValid()) if (curveDrawable.isNull() || !curveDrawable->boundingBox().isValid())
{ {
@ -154,19 +163,26 @@ double Riv3dWellLogPlanePartMgr::planeAngle(const Rim3dWellLogCurve::DrawPlane&
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
double Riv3dWellLogPlanePartMgr::wellPathCenterToPlotStartOffset() const double Riv3dWellLogPlanePartMgr::wellPathCenterToPlotStartOffset(Rim3dWellLogCurveCollection::PlanePosition planePosition) const
{ {
if (!m_gridView) return 0; if (!m_gridView) return 0;
double cellSize = m_gridView->ownerCase()->characteristicCellSize(); double cellSize = m_gridView->ownerCase()->characteristicCellSize();
return -cellSize * 2; if (planePosition == Rim3dWellLogCurveCollection::ALONG_WELLPATH)
{
return m_wellPath->wellPathRadius(cellSize) * 2;
}
else
{
return -cellSize * 2;
}
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
double Riv3dWellLogPlanePartMgr::planeWidth() const double Riv3dWellLogPlanePartMgr::planeWidth() const
{ {
@ -177,7 +193,6 @@ double Riv3dWellLogPlanePartMgr::planeWidth() const
return cellSize * 4; return cellSize * 4;
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -187,13 +202,21 @@ void Riv3dWellLogPlanePartMgr::appendGridToModel(cvf::ModelBasicList*
const Rim3dWellLogCurve::DrawPlane& drawPlane, const Rim3dWellLogCurve::DrawPlane& drawPlane,
double gridIntervalSize) double gridIntervalSize)
{ {
const Rim3dWellLogCurveCollection* curveCollection = m_wellPath->rim3dWellLogCurveCollection();
Rim3dWellLogCurveCollection::PlanePosition planePosition = curveCollection->planePosition();
caf::MeshEffectGenerator meshEffectGen(cvf::Color3f(0.4f, 0.4f, 0.4f)); caf::MeshEffectGenerator meshEffectGen(cvf::Color3f(0.4f, 0.4f, 0.4f));
cvf::ref<cvf::Drawable> gridHorizontalDrawable = m_3dWellLogCurveGeometryGenerator->createGrid( cvf::ref<cvf::Drawable> gridHorizontalDrawable =
displayCoordTransform, wellPathClipBoundingBox, planeAngle(drawPlane), wellPathCenterToPlotStartOffset(), planeWidth(), gridIntervalSize); m_3dWellLogCurveGeometryGenerator->createGrid(displayCoordTransform,
wellPathClipBoundingBox,
planeAngle(drawPlane),
wellPathCenterToPlotStartOffset(planePosition),
planeWidth(),
gridIntervalSize);
cvf::ref<cvf::Effect> effect = meshEffectGen.generateCachedEffect(); cvf::ref<cvf::Effect> effect = meshEffectGen.generateCachedEffect();
cvf::ref<cvf::Part> part = createPart(gridHorizontalDrawable.p(), effect.p()); cvf::ref<cvf::Part> part = createPart(gridHorizontalDrawable.p(), effect.p());
if (part.notNull()) if (part.notNull())
{ {

View File

@ -22,6 +22,7 @@
#include "cvfObject.h" #include "cvfObject.h"
#include "Rim3dWellLogCurve.h" #include "Rim3dWellLogCurve.h"
#include "Rim3dWellLogCurveCollection.h"
#include "cafPdmPointer.h" #include "cafPdmPointer.h"
@ -68,7 +69,7 @@ private:
static double planeAngle(const Rim3dWellLogCurve::DrawPlane& drawPlane); static double planeAngle(const Rim3dWellLogCurve::DrawPlane& drawPlane);
double wellPathCenterToPlotStartOffset() const; double wellPathCenterToPlotStartOffset(Rim3dWellLogCurveCollection::PlanePosition planePosition) const;
double planeWidth() const; double planeWidth() const;
private: private:

View File

@ -23,6 +23,17 @@
CAF_PDM_SOURCE_INIT(Rim3dWellLogCurveCollection, "Rim3dWellLogCurveCollection"); CAF_PDM_SOURCE_INIT(Rim3dWellLogCurveCollection, "Rim3dWellLogCurveCollection");
namespace caf
{
template<>
void AppEnum< Rim3dWellLogCurveCollection::PlanePosition >::setUp()
{
addItem(Rim3dWellLogCurveCollection::ALONG_WELLPATH, "ALONG_WELLPATH", "On One Side of Well Path");
addItem(Rim3dWellLogCurveCollection::ON_WELLPATH, "ON_WELLPATH", "On Well Path");
setDefault(Rim3dWellLogCurveCollection::ALONG_WELLPATH);
}
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -35,6 +46,8 @@ Rim3dWellLogCurveCollection::Rim3dWellLogCurveCollection()
CAF_PDM_InitField(&m_showGrid, "Show3dWellLogGrid", true, "Show Grid", "", "", ""); CAF_PDM_InitField(&m_showGrid, "Show3dWellLogGrid", true, "Show Grid", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_planePosition, "PlanePosition", "Plane Position", "", "", "");
CAF_PDM_InitFieldNoDefault(&m_3dWellLogCurves, "ArrayOf3dWellLogCurves", "", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_3dWellLogCurves, "ArrayOf3dWellLogCurves", "", "", "", "");
m_3dWellLogCurves.uiCapability()->setUiTreeHidden(true); m_3dWellLogCurves.uiCapability()->setUiTreeHidden(true);
} }
@ -82,6 +95,14 @@ bool Rim3dWellLogCurveCollection::isShowingPlot() const
return m_showPlot; return m_showPlot;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
Rim3dWellLogCurveCollection::PlanePosition Rim3dWellLogCurveCollection::planePosition() const
{
return m_planePosition();
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -113,3 +134,14 @@ caf::PdmFieldHandle* Rim3dWellLogCurveCollection::objectToggleField()
{ {
return &m_showPlot; return &m_showPlot;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
void Rim3dWellLogCurveCollection::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering)
{
caf::PdmUiGroup* settingsGroup = uiOrdering.addNewGroup("Track Settings");
settingsGroup->add(&m_showGrid);
settingsGroup->add(&m_planePosition);
}

View File

@ -18,6 +18,7 @@
#pragma once #pragma once
#include "cafAppEnum.h"
#include "cafPdmChildArrayField.h" #include "cafPdmChildArrayField.h"
#include "cafPdmField.h" #include "cafPdmField.h"
#include "cafPdmObject.h" #include "cafPdmObject.h"
@ -32,6 +33,13 @@ class Rim3dWellLogCurveCollection : public caf::PdmObject
{ {
CAF_PDM_HEADER_INIT; CAF_PDM_HEADER_INIT;
public:
enum PlanePosition
{
ALONG_WELLPATH,
ON_WELLPATH
};
public: public:
Rim3dWellLogCurveCollection(); Rim3dWellLogCurveCollection();
virtual ~Rim3dWellLogCurveCollection(); virtual ~Rim3dWellLogCurveCollection();
@ -42,14 +50,20 @@ public:
bool isShowingGrid() const; bool isShowingGrid() const;
bool isShowingPlot() const; bool isShowingPlot() const;
PlanePosition planePosition() const;
std::vector<Rim3dWellLogCurve*> vectorOf3dWellLogCurves() const; std::vector<Rim3dWellLogCurve*> vectorOf3dWellLogCurves() const;
private: private:
virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override;
virtual caf::PdmFieldHandle* objectToggleField() override; virtual caf::PdmFieldHandle* objectToggleField() override;
virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override;
private: private:
caf::PdmField<bool> m_showPlot; caf::PdmField<bool> m_showPlot;
caf::PdmField<bool> m_showGrid; caf::PdmField<bool> m_showGrid;
caf::PdmField<caf::AppEnum<PlanePosition>> m_planePosition;
caf::PdmChildArrayField<Rim3dWellLogCurve*> m_3dWellLogCurves; caf::PdmChildArrayField<Rim3dWellLogCurve*> m_3dWellLogCurves;
}; };