diff --git a/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake b/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake index 10c888ad6f..1484e33117 100644 --- a/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake +++ b/ApplicationCode/ProjectDataModel/CMakeLists_files.cmake @@ -98,6 +98,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RimSummaryCalculationCollection.h ${CMAKE_CURRENT_LIST_DIR}/RimSummaryCalculationVariable.h ${CMAKE_CURRENT_LIST_DIR}/RimStimPlanLegendConfig.h ${CMAKE_CURRENT_LIST_DIR}/RimStimPlanColors.h +${CMAKE_CURRENT_LIST_DIR}/Rim3dWellLogCurve.h ) @@ -200,6 +201,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RimSummaryCalculationCollection.cpp ${CMAKE_CURRENT_LIST_DIR}/RimSummaryCalculationVariable.cpp ${CMAKE_CURRENT_LIST_DIR}/RimStimPlanLegendConfig.cpp ${CMAKE_CURRENT_LIST_DIR}/RimStimPlanColors.cpp +${CMAKE_CURRENT_LIST_DIR}/Rim3dWellLogCurve.cpp ) list(APPEND CODE_HEADER_FILES diff --git a/ApplicationCode/ProjectDataModel/Rim3dWellLogCurve.cpp b/ApplicationCode/ProjectDataModel/Rim3dWellLogCurve.cpp new file mode 100644 index 0000000000..19a9a6483b --- /dev/null +++ b/ApplicationCode/ProjectDataModel/Rim3dWellLogCurve.cpp @@ -0,0 +1,138 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2018- Statoil ASA +// +// 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. +// +// 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. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#include "Rim3dWellLogCurve.h" + +#include "RimEclipseCase.h" +#include "RimEclipseResultDefinition.h" +#include "RimGeoMechCase.h" +#include "RimGeoMechResultDefinition.h" + + +//================================================================================================== +/// +/// +//================================================================================================== + +CAF_PDM_SOURCE_INIT(Rim3dWellLogCurve, "Rim3dWellLogCurve"); + +namespace caf +{ + template<> + void AppEnum< Rim3dWellLogCurve::DrawPlane >::setUp() + { + addItem(Rim3dWellLogCurve::HORIZONTAL_LEFT, "HORIZONTAL_LEFT", "Horizontal - Left"); + addItem(Rim3dWellLogCurve::HORIZONTAL_RIGHT, "HORIZONTAL_RIGHT", "Horizontal - Right"); + addItem(Rim3dWellLogCurve::VERTICAL_ABOVE, "VERTICAL_ABOVE", "Vertical - Above"); + addItem(Rim3dWellLogCurve::VERTICAL_BELOW, "VERTICAL_BELOW", "Vertical - Below"); + addItem(Rim3dWellLogCurve::CAMERA_ALIGNED_SIDE1, "CAMERA_ALIGNED_SIDE_1", "Camera Aligned - Side 1"); + addItem(Rim3dWellLogCurve::CAMERA_ALIGNED_SIDE2, "CAMERA_ALIGNED_SIDE_2", "Camera Aligned - Side 2"); + setDefault(Rim3dWellLogCurve::HORIZONTAL_LEFT); + } + + template<> + void AppEnum< Rim3dWellLogCurve::DrawStyle >::setUp() + { + addItem(Rim3dWellLogCurve::LINE, "LINE", "Line"); + addItem(Rim3dWellLogCurve::FILLED, "FILLED", "Filled"); + setDefault(Rim3dWellLogCurve::LINE); + } + + template<> + void AppEnum< Rim3dWellLogCurve::ColoringStyle >::setUp() + { + addItem(Rim3dWellLogCurve::SINGLE_COLOR, "SINGLE_COLOR", "Single Color"); + addItem(Rim3dWellLogCurve::CURVE_VALUE, "CURVE_VALUE", "Curve Value"); + addItem(Rim3dWellLogCurve::OTHER_RESULT, "OTHER_RESULT", "Other Result"); + setDefault(Rim3dWellLogCurve::SINGLE_COLOR); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +Rim3dWellLogCurve::Rim3dWellLogCurve() +{ + CAF_PDM_InitObject("3d Well Log Curve", "", "", ""); + + CAF_PDM_InitFieldNoDefault(&m_drawPlane, "DrawPlane", "Draw Plane", "", "", ""); + CAF_PDM_InitFieldNoDefault(&m_drawStyle, "DrawStyle", "Draw Style", "", "", ""); + CAF_PDM_InitFieldNoDefault(&m_coloringStyle, "ColoringStyle", "Coloring Style", "", "", ""); + + CAF_PDM_InitFieldNoDefault(&m_case, "CurveCase", "Case", "", "", ""); + m_case.uiCapability()->setUiTreeChildrenHidden(true); + + CAF_PDM_InitFieldNoDefault(&m_eclipseResultDefinition, "CurveEclipseResult", "", "", "", ""); + m_eclipseResultDefinition.uiCapability()->setUiHidden(true); + m_eclipseResultDefinition.uiCapability()->setUiTreeChildrenHidden(true); + m_eclipseResultDefinition = new RimEclipseResultDefinition; + m_eclipseResultDefinition->findField("MResultType")->uiCapability()->setUiName("Result Type"); + + CAF_PDM_InitFieldNoDefault(&m_geomResultDefinition, "CurveGeomechResult", "", "", "", ""); + m_geomResultDefinition.uiCapability()->setUiHidden(true); + m_geomResultDefinition.uiCapability()->setUiTreeChildrenHidden(true); + m_geomResultDefinition = new RimGeoMechResultDefinition; + + CAF_PDM_InitField(&m_timeStep, "CurveTimeStep", 0, "Time Step", "", "", ""); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +Rim3dWellLogCurve::~Rim3dWellLogCurve() +{ + delete m_geomResultDefinition; + delete m_eclipseResultDefinition; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void Rim3dWellLogCurve::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) +{ + caf::PdmUiGroup* curveDataGroup = uiOrdering.addNewGroup("Curve Data"); + + curveDataGroup->add(&m_case); + + RimGeoMechCase* geomCase = dynamic_cast(m_case.value()); + RimEclipseCase* eclipseCase = dynamic_cast(m_case.value()); + + if (eclipseCase) + { + m_eclipseResultDefinition->uiOrdering(uiConfigName, *curveDataGroup); + + } + else if (geomCase) + { + m_geomResultDefinition->uiOrdering(uiConfigName, *curveDataGroup); + + } + + if ((eclipseCase && m_eclipseResultDefinition->hasDynamicResult()) + || geomCase) + { + curveDataGroup->add(&m_timeStep); + } + + caf::PdmUiGroup* formatGroup = uiOrdering.addNewGroup("Appearance"); + formatGroup->add(&m_drawPlane); + formatGroup->add(&m_drawStyle); + formatGroup->add(&m_coloringStyle); + + uiOrdering.skipRemainingFields(); +} diff --git a/ApplicationCode/ProjectDataModel/Rim3dWellLogCurve.h b/ApplicationCode/ProjectDataModel/Rim3dWellLogCurve.h new file mode 100644 index 0000000000..8c35fa105b --- /dev/null +++ b/ApplicationCode/ProjectDataModel/Rim3dWellLogCurve.h @@ -0,0 +1,80 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2018- Statoil ASA +// +// 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. +// +// 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. +// +// See the GNU General Public License at +// for more details. +// +///////////////////////////////////////////////////////////////////////////////// + +#pragma once + +#include "cafAppEnum.h" +#include "cafPdmChildField.h" +#include "cafPdmField.h" +#include "cafPdmObject.h" + +#include "RimCase.h" + +class RimGeoMechResultDefinition; +class RimEclipseResultDefinition; + +//================================================================================================== +/// +/// +//================================================================================================== +class Rim3dWellLogCurve : public caf::PdmObject +{ + CAF_PDM_HEADER_INIT; + +public: + enum DrawPlane + { + HORIZONTAL_LEFT, + HORIZONTAL_RIGHT, + VERTICAL_ABOVE, + VERTICAL_BELOW, + CAMERA_ALIGNED_SIDE1, + CAMERA_ALIGNED_SIDE2 + }; + + enum DrawStyle + { + LINE, + FILLED + }; + + enum ColoringStyle + { + SINGLE_COLOR, + CURVE_VALUE, + OTHER_RESULT + }; + + +public: + Rim3dWellLogCurve(); + virtual ~Rim3dWellLogCurve(); + +private: + virtual void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override; + +private: + caf::PdmPtrField m_case; + caf::PdmField m_timeStep; + caf::PdmChildField m_eclipseResultDefinition; + caf::PdmChildField m_geomResultDefinition; + + caf::PdmField> m_drawPlane; + caf::PdmField> m_drawStyle; + caf::PdmField> m_coloringStyle; +}; diff --git a/ApplicationCode/ProjectDataModel/RimWellPath.cpp b/ApplicationCode/ProjectDataModel/RimWellPath.cpp index 1c49bb9531..3a39485916 100644 --- a/ApplicationCode/ProjectDataModel/RimWellPath.cpp +++ b/ApplicationCode/ProjectDataModel/RimWellPath.cpp @@ -29,6 +29,7 @@ #include "RigWellPath.h" +#include "Rim3dWellLogCurve.h" #include "RimFishbonesMultipleSubs.h" #include "RimMainPlotCollection.h" #include "RimProject.h" @@ -128,6 +129,8 @@ RimWellPath::RimWellPath() CAF_PDM_InitFieldNoDefault(&m_wellLogFiles, "WellLogFiles", "Well Log Files", "", "", ""); m_wellLogFiles.uiCapability()->setUiTreeHidden(true); + CAF_PDM_InitFieldNoDefault(&m_3dWellLogCurves, "ArrayOf3dWellLogCurves", "3D Track", "", "", ""); + CAF_PDM_InitField(&m_formationKeyInFile, "WellPathFormationKeyInFile", QString(""), "Key in File", "", "", ""); m_formationKeyInFile.uiCapability()->setUiReadOnly(true); @@ -157,6 +160,11 @@ RimWellPath::~RimWellPath() delete file; } + for (const auto& rim3dWellLogCurve : m_3dWellLogCurves()) + { + delete rim3dWellLogCurve; + } + RimProject* project; firstAncestorOrThisOfType(project); if (project) @@ -511,6 +519,11 @@ void RimWellPath::defineUiTreeOrdering(caf::PdmUiTreeOrdering& uiTreeOrdering, Q uiTreeOrdering.add(&m_completions); } + if (!m_3dWellLogCurves.empty()) + { + uiTreeOrdering.add(&m_3dWellLogCurves); + } + uiTreeOrdering.skipRemainingChildren(true); } @@ -790,6 +803,14 @@ const RigWellPathFormations* RimWellPath::formationsGeometry() const return m_wellPathFormations.p(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimWellPath::add3dWellLogCurve(Rim3dWellLogCurve* rim3dWellLogCurve) +{ + m_3dWellLogCurves.push_back(rim3dWellLogCurve); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/RimWellPath.h b/ApplicationCode/ProjectDataModel/RimWellPath.h index b7201b54a8..fc4cbedfb5 100644 --- a/ApplicationCode/ProjectDataModel/RimWellPath.h +++ b/ApplicationCode/ProjectDataModel/RimWellPath.h @@ -41,6 +41,7 @@ class RifWellPathFormationsImporter; class RigWellPath; class RimProject; class RimWellLogFile; +class Rim3dWellLogCurve; class RimFishboneWellPathCollection; class RimFishbonesCollection; @@ -75,6 +76,8 @@ public: bool hasFormations() const; const RigWellPathFormations* formationsGeometry() const; + void add3dWellLogCurve(Rim3dWellLogCurve* rim3dWellLogCurve); + virtual caf::PdmFieldHandle* userDescriptionField() override; virtual caf::PdmFieldHandle* objectToggleField() override; @@ -171,6 +174,8 @@ private: caf::PdmField m_formationKeyInFile; caf::PdmChildArrayField m_wellLogFiles; + + caf::PdmChildArrayField m_3dWellLogCurves; caf::PdmChildField m_wellLogFile_OBSOLETE; };