From 9da3f09782fb8aa57d316d8c1b8bb3d64e307748 Mon Sep 17 00:00:00 2001 From: Gaute Lindkvist Date: Tue, 17 Apr 2018 09:40:30 +0200 Subject: [PATCH] 3D Well Log Curves (#2668): Implement Draw-plane width control * Apply a factor between 0.25 and 2.5 times the characteristic cell size * Make the offset from the pipe scale with the plane width up to a maximum offset. * Organise the CurveCollection settings into two groups. --- .../Riv3dWellLogPlanePartMgr.cpp | 7 ++-- .../Rim3dWellLogCurveCollection.cpp | 33 ++++++++++++++++--- .../Completions/Rim3dWellLogCurveCollection.h | 5 +-- 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/ApplicationCode/ModelVisualization/Riv3dWellLogPlanePartMgr.cpp b/ApplicationCode/ModelVisualization/Riv3dWellLogPlanePartMgr.cpp index 6bb01d9ede..25e3640b25 100644 --- a/ApplicationCode/ModelVisualization/Riv3dWellLogPlanePartMgr.cpp +++ b/ApplicationCode/ModelVisualization/Riv3dWellLogPlanePartMgr.cpp @@ -173,7 +173,8 @@ double Riv3dWellLogPlanePartMgr::wellPathCenterToPlotStartOffset(Rim3dWellLogCur if (planePosition == Rim3dWellLogCurveCollection::ALONG_WELLPATH) { - return m_wellPath->wellPathRadius(cellSize) * 2; + double wellPathOffset = std::min(m_wellPath->wellPathRadius(cellSize), 0.1 * planeWidth()); + return m_wellPath->wellPathRadius(cellSize) + wellPathOffset; } else { @@ -189,8 +190,8 @@ double Riv3dWellLogPlanePartMgr::planeWidth() const if (!m_gridView) return 0; double cellSize = m_gridView->ownerCase()->characteristicCellSize(); - - return cellSize * 1.0; + const Rim3dWellLogCurveCollection* curveCollection = m_wellPath->rim3dWellLogCurveCollection(); + return cellSize * curveCollection->planeWidthScaling(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Completions/Rim3dWellLogCurveCollection.cpp b/ApplicationCode/ProjectDataModel/Completions/Rim3dWellLogCurveCollection.cpp index b04ecfaddd..89ca5351e9 100644 --- a/ApplicationCode/ProjectDataModel/Completions/Rim3dWellLogCurveCollection.cpp +++ b/ApplicationCode/ProjectDataModel/Completions/Rim3dWellLogCurveCollection.cpp @@ -23,6 +23,8 @@ #include "RimWellPath.h" #include "RimProject.h" +#include "cafPdmUiDoubleSliderEditor.h" + CAF_PDM_SOURCE_INIT(Rim3dWellLogCurveCollection, "Rim3dWellLogCurveCollection"); namespace caf @@ -47,7 +49,8 @@ Rim3dWellLogCurveCollection::Rim3dWellLogCurveCollection() m_showPlot.uiCapability()->setUiHidden(true); CAF_PDM_InitFieldNoDefault(&m_planePosition, "PlanePosition", "Plane Position", "", "", ""); - + CAF_PDM_InitField(&m_planeWidthScaling, "PlaneWidthScaling", 1.0f, "Plane Width Scaling Factor", "", "", ""); + m_planeWidthScaling.uiCapability()->setUiEditorTypeName(caf::PdmUiDoubleSliderEditor::uiEditorTypeName()); CAF_PDM_InitField(&m_showGrid, "Show3dWellLogGrid", true, "Show Grid", "", "", ""); CAF_PDM_InitField(&m_showBackground, "Show3dWellLogBackground", false, "Show Background", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_3dWellLogCurves, "ArrayOf3dWellLogCurves", "", "", "", ""); @@ -100,7 +103,7 @@ bool Rim3dWellLogCurveCollection::isShowingPlot() const } //-------------------------------------------------------------------------------------------------- -/// +/// //-------------------------------------------------------------------------------------------------- bool Rim3dWellLogCurveCollection::isShowingGrid() const { @@ -124,6 +127,14 @@ Rim3dWellLogCurveCollection::PlanePosition Rim3dWellLogCurveCollection::planePos return m_planePosition(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +float Rim3dWellLogCurveCollection::planeWidthScaling() const +{ + return m_planeWidthScaling; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -181,11 +192,23 @@ caf::PdmFieldHandle* Rim3dWellLogCurveCollection::objectToggleField() void Rim3dWellLogCurveCollection::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) { caf::PdmUiGroup* settingsGroup = uiOrdering.addNewGroup("Draw Plane Settings"); - settingsGroup->add(&m_planePosition); - + settingsGroup->add(&m_planeWidthScaling); + caf::PdmUiGroup* appearanceSettingsGroup = uiOrdering.addNewGroup("Draw Plane Appearance"); appearanceSettingsGroup->add(&m_showGrid); appearanceSettingsGroup->add(&m_showBackground); - +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void Rim3dWellLogCurveCollection::defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute) +{ + caf::PdmUiDoubleSliderEditorAttribute* widthAttribute = dynamic_cast(attribute); + if (widthAttribute) + { + widthAttribute->m_minimum = 0.25; + widthAttribute->m_maximum = 2.5; + } } diff --git a/ApplicationCode/ProjectDataModel/Completions/Rim3dWellLogCurveCollection.h b/ApplicationCode/ProjectDataModel/Completions/Rim3dWellLogCurveCollection.h index 82a5f58743..da3f2cfedf 100644 --- a/ApplicationCode/ProjectDataModel/Completions/Rim3dWellLogCurveCollection.h +++ b/ApplicationCode/ProjectDataModel/Completions/Rim3dWellLogCurveCollection.h @@ -53,6 +53,7 @@ public: bool isShowingBackground() const; PlanePosition planePosition() const; + float planeWidthScaling() const; std::vector vectorOf3dWellLogCurves() const; void redrawAffectedViewsAndEditors(); @@ -61,11 +62,11 @@ private: virtual void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; virtual caf::PdmFieldHandle* objectToggleField() override; virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override; - + virtual void defineEditorAttribute(const caf::PdmFieldHandle* field, QString uiConfigName, caf::PdmUiEditorAttribute* attribute); private: caf::PdmField m_showPlot; - caf::PdmField> m_planePosition; + caf::PdmField m_planeWidthScaling; caf::PdmField m_showGrid; caf::PdmField m_showBackground;