diff --git a/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.cpp b/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.cpp index 06d09a9538..e71d5fd0f8 100644 --- a/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.cpp +++ b/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.cpp @@ -52,13 +52,16 @@ RivPolylineAnnotationPartMgr::~RivPolylineAnnotationPartMgr() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -void RivPolylineAnnotationPartMgr::buildPolygonAnnotationParts(const caf::DisplayCoordTransform* displayXf) +void RivPolylineAnnotationPartMgr::buildPolylineAnnotationParts(const caf::DisplayCoordTransform* displayXf) { clearAllGeometry(); if (!m_rimAnnotation->isEmpty()) { const auto& points = m_rimAnnotation->polyLinesData(); + auto lineColor = m_rimAnnotation->appearance()->color(); + auto isDashedLine = m_rimAnnotation->appearance()->isDashed(); + auto lineThickness = m_rimAnnotation->appearance()->thickness(); auto linesInDisplayCoords = points->polyLines(); @@ -75,8 +78,10 @@ void RivPolylineAnnotationPartMgr::buildPolygonAnnotationParts(const caf::Displa //part->setName("RivAnnotationPartMgr: text " + cvfString); part->setDrawable(drawableGeo.p()); - caf::MeshEffectGenerator colorEffgen(cvf::Color3f::RED); - cvf::ref eff = colorEffgen.generateCachedEffect(); + caf::MeshEffectGenerator effgen(lineColor); + effgen.setLineWidth(lineThickness); + if (isDashedLine) effgen.setLineStipple(true); + cvf::ref eff = effgen.generateCachedEffect(); part->setEffect(eff.p()); part->setPriority(RivPartPriority::PartType::MeshLines); @@ -105,7 +110,7 @@ void RivPolylineAnnotationPartMgr::appendDynamicGeometryPartsToModel(cvf::ModelB if (m_rimAnnotation.isNull()) return; if (m_rimAnnotation->isEmpty()) return; - buildPolygonAnnotationParts(displayXf); + buildPolylineAnnotationParts(displayXf); model->addPart(m_part.p()); } diff --git a/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.h b/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.h index 4ea666fe3b..63aff604f0 100644 --- a/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.h +++ b/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.h @@ -51,7 +51,7 @@ public: const caf::DisplayCoordTransform * displayXf); private: - void buildPolygonAnnotationParts(const caf::DisplayCoordTransform* displayXf); + void buildPolylineAnnotationParts(const caf::DisplayCoordTransform* displayXf); void clearAllGeometry(); diff --git a/ApplicationCode/ModelVisualization/RivReachCircleAnnotationPartMgr.cpp b/ApplicationCode/ModelVisualization/RivReachCircleAnnotationPartMgr.cpp index 8560c1adb0..57159232ef 100644 --- a/ApplicationCode/ModelVisualization/RivReachCircleAnnotationPartMgr.cpp +++ b/ApplicationCode/ModelVisualization/RivReachCircleAnnotationPartMgr.cpp @@ -64,6 +64,9 @@ void RivReachCircleAnnotationPartMgr::buildParts(const caf::DisplayCoordTransfor Vec3d centerPosition = displayXf->transformToDisplayCoord(m_rimAnnotation->centerPoint()); double radius = m_rimAnnotation->radius(); + auto lineColor = m_rimAnnotation->appearance()->color(); + auto isDashedLine = m_rimAnnotation->appearance()->isDashed(); + auto lineThickness = m_rimAnnotation->appearance()->thickness(); // Circle part { @@ -82,8 +85,10 @@ void RivReachCircleAnnotationPartMgr::buildParts(const caf::DisplayCoordTransfor cvf::ref part = new cvf::Part; part->setDrawable(drawableGeo.p()); - caf::MeshEffectGenerator colorEffgen(cvf::Color3f::RED); - cvf::ref eff = colorEffgen.generateUnCachedEffect(); + caf::MeshEffectGenerator effgen(lineColor); + effgen.setLineWidth(lineThickness); + if (isDashedLine) effgen.setLineStipple(true); + cvf::ref eff = effgen.generateUnCachedEffect(); part->setEffect(eff.p()); part->setPriority(RivPartPriority::PartType::MeshLines); diff --git a/ApplicationCode/ProjectDataModel/Annotations/CMakeLists_files.cmake b/ApplicationCode/ProjectDataModel/Annotations/CMakeLists_files.cmake index 684422948c..b6cb99e3ff 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/CMakeLists_files.cmake +++ b/ApplicationCode/ProjectDataModel/Annotations/CMakeLists_files.cmake @@ -5,6 +5,8 @@ ${CMAKE_CURRENT_LIST_DIR}/RimPolylinesAnnotation.h ${CMAKE_CURRENT_LIST_DIR}/RimReachCircleAnnotation.h ${CMAKE_CURRENT_LIST_DIR}/RimTextAnnotation.h ${CMAKE_CURRENT_LIST_DIR}/RimAnnotationInViewCollection.h +${CMAKE_CURRENT_LIST_DIR}/RimAnnotationLineAppearance.h +${CMAKE_CURRENT_LIST_DIR}/RimLineBasedAnnotation.h ) set (SOURCE_GROUP_SOURCE_FILES @@ -13,6 +15,8 @@ ${CMAKE_CURRENT_LIST_DIR}/RimPolylinesAnnotation.cpp ${CMAKE_CURRENT_LIST_DIR}/RimReachCircleAnnotation.cpp ${CMAKE_CURRENT_LIST_DIR}/RimTextAnnotation.cpp ${CMAKE_CURRENT_LIST_DIR}/RimAnnotationInViewCollection.cpp +${CMAKE_CURRENT_LIST_DIR}/RimAnnotationLineAppearance.cpp +${CMAKE_CURRENT_LIST_DIR}/RimLineBasedAnnotation.cpp ) list(APPEND CODE_HEADER_FILES diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationLineAppearance.cpp b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationLineAppearance.cpp new file mode 100644 index 0000000000..0db3e568a2 --- /dev/null +++ b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationLineAppearance.cpp @@ -0,0 +1,170 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2011- Statoil ASA +// Copyright (C) 2013- Ceetron Solutions AS +// Copyright (C) 2011-2012 Ceetron AS +// +// 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 "RimAnnotationLineAppearance.h" + +#include "RiaApplication.h" +#include "RiaColorTables.h" +#include "RiaLogging.h" +#include "RiaPreferences.h" +#include "RiaWellNameComparer.h" + +#include "RigEclipseCaseData.h" +#include "RigMainGrid.h" +#include "RigWellPath.h" + +#include "RimAnnotationInViewCollection.h" +#include "RimEclipseCase.h" +#include "RimEclipseCaseCollection.h" +#include "RimGridView.h" +#include "RimOilField.h" +#include "RimProject.h" +#include "RimWellLogFile.h" +#include "RimWellPath.h" +#include "RimPerforationCollection.h" + +#include "Riu3DMainWindowTools.h" + +#include "RifWellPathFormationsImporter.h" +#include "RifWellPathImporter.h" + +#include "cafPdmUiEditorHandle.h" +#include "cafProgressInfo.h" + +#include +#include +#include +#include + +#include +#include +#include "RimFileWellPath.h" +#include "RimModeledWellPath.h" + +namespace caf +{ +template<> +void RimAnnotationLineAppearance::LineStyle::setUp() +{ + addItem(RimAnnotationLineAppearance::STYLE_SOLID, "STYLE_SOLID", "Solid"); + addItem(RimAnnotationLineAppearance::STYLE_DASH, "STYLE_DASH", "Dashes"); + + setDefault(RimAnnotationLineAppearance::STYLE_SOLID); +} +} + + +CAF_PDM_SOURCE_INIT(RimAnnotationLineAppearance, "RimAnnotationLineAppearance"); + + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimAnnotationLineAppearance::RimAnnotationLineAppearance() +{ + CAF_PDM_InitObject("TextAnnotation", ":/WellCollection.png", "", ""); + + CAF_PDM_InitField(&m_color, "Color", cvf::Color3f(cvf::Color3f::BLACK), "Color", "", "", ""); + CAF_PDM_InitField(&m_style, "Style", LineStyle(), "Style", "", "", ""); + CAF_PDM_InitField(&m_thickness, "Thickness", 1, "Thickness", "", "", ""); + + m_fieldChangedByUiCallback = nullptr; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::Color3f RimAnnotationLineAppearance::color() const +{ + return m_color(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimAnnotationLineAppearance::isDashed() const +{ + return m_style() == STYLE_DASH; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +int RimAnnotationLineAppearance::thickness() const +{ + return m_thickness(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +const caf::PdmFieldHandle* RimAnnotationLineAppearance::colorField() const +{ + return &m_color; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +const caf::PdmFieldHandle* RimAnnotationLineAppearance::styleField() const +{ + return &m_style; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +const caf::PdmFieldHandle* RimAnnotationLineAppearance::thicknessField() const +{ + return &m_thickness; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimAnnotationLineAppearance::registerFieldChangedByUiCallback(FieldChangedByUiDelegate func) +{ + m_fieldChangedByUiCallback = func; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimAnnotationLineAppearance::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) +{ + uiOrdering.add(&m_color); + uiOrdering.add(&m_style); + uiOrdering.add(&m_thickness); + + uiOrdering.skipRemainingFields(true); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimAnnotationLineAppearance::fieldChangedByUi(const caf::PdmFieldHandle* changedField, + const QVariant& oldValue, + const QVariant& newValue) +{ + if (m_fieldChangedByUiCallback) + { + m_fieldChangedByUiCallback(changedField, oldValue, newValue); + } +} diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationLineAppearance.h b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationLineAppearance.h new file mode 100644 index 0000000000..8a08d31b52 --- /dev/null +++ b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationLineAppearance.h @@ -0,0 +1,93 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2011- Statoil ASA +// Copyright (C) 2013- Ceetron Solutions AS +// Copyright (C) 2011-2012 Ceetron AS +// +// 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 "cafPdmChildArrayField.h" +#include "cafPdmField.h" +#include "cafPdmObject.h" +#include "cafPdmPointer.h" +#include "cafAppEnum.h" +#include "cafPdmUiOrdering.h" + +// Include to make Pdm work for cvf::Color +#include "cafPdmFieldCvfColor.h" +#include "cafPdmChildField.h" +#include "cafPdmFieldCvfVec3d.h" + +#include "cvfObject.h" +#include "cvfVector3.h" + +#include + +class QString; +class RimGridView; + + +//================================================================================================== +/// +/// +//================================================================================================== +class RimAnnotationLineAppearance : public caf::PdmObject +{ + // Friends + friend class RimReachCircleAnnotation; + friend class RimUserDefinedPolylinesAnnotation; + friend class RimPolylinesFromFileAnnotation; + + using Vec3d = cvf::Vec3d; + + CAF_PDM_HEADER_INIT; + +public: + using FieldChangedByUiDelegate = std::function; + + enum LineStyleEnum + { + STYLE_SOLID, + STYLE_DASH + }; + typedef caf::AppEnum LineStyle; + +public: + RimAnnotationLineAppearance(); + + cvf::Color3f color() const; + bool isDashed() const; + int thickness() const; + + const caf::PdmFieldHandle* colorField() const; + const caf::PdmFieldHandle* styleField() const; + const caf::PdmFieldHandle* thicknessField() const; + + void registerFieldChangedByUiCallback(FieldChangedByUiDelegate func); + +protected: + void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override; + void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; + +private: + caf::PdmField m_color; + caf::PdmField m_style; + caf::PdmField m_thickness; + + FieldChangedByUiDelegate m_fieldChangedByUiCallback; +}; + diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimLineBasedAnnotation.cpp b/ApplicationCode/ProjectDataModel/Annotations/RimLineBasedAnnotation.cpp new file mode 100644 index 0000000000..b59ca361b1 --- /dev/null +++ b/ApplicationCode/ProjectDataModel/Annotations/RimLineBasedAnnotation.cpp @@ -0,0 +1,88 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2011- Statoil ASA +// Copyright (C) 2013- Ceetron Solutions AS +// Copyright (C) 2011-2012 Ceetron AS +// +// 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 "RimLineBasedAnnotation.h" + +#include "RiaApplication.h" +#include "RiaColorTables.h" +#include "RiaLogging.h" +#include "RiaPreferences.h" +#include "RiaWellNameComparer.h" + +#include "RigEclipseCaseData.h" +#include "RigMainGrid.h" +#include "RigWellPath.h" + +#include "RimAnnotationInViewCollection.h" +#include "RimEclipseCase.h" +#include "RimEclipseCaseCollection.h" +#include "RimGridView.h" +#include "RimOilField.h" +#include "RimProject.h" +#include "RimWellLogFile.h" +#include "RimWellPath.h" +#include "RimPerforationCollection.h" +#include "RimFileWellPath.h" +#include "RimModeledWellPath.h" + +#include "Riu3DMainWindowTools.h" + +#include "RifWellPathFormationsImporter.h" +#include "RifWellPathImporter.h" + +#include "cafPdmUiEditorHandle.h" +#include "cafProgressInfo.h" + +#include +#include +#include +#include + +#include +#include +#include + + +CAF_PDM_SOURCE_INIT(RimLineBasedAnnotation, "RimLineBasedAnnotation"); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimLineBasedAnnotation::RimLineBasedAnnotation() +{ + CAF_PDM_InitFieldNoDefault(&m_appearance, "LineAppearance", "Line Appearance", "", "", ""); + + m_appearance = new RimAnnotationLineAppearance(); + m_appearance.uiCapability()->setUiTreeHidden(true); + m_appearance.uiCapability()->setUiTreeChildrenHidden(true); + + m_appearance->registerFieldChangedByUiCallback( + [this](const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) { + this->fieldChangedByUi(changedField, oldValue, newValue); + }); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimAnnotationLineAppearance* RimLineBasedAnnotation::appearance() const +{ + return m_appearance; +} diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimLineBasedAnnotation.h b/ApplicationCode/ProjectDataModel/Annotations/RimLineBasedAnnotation.h new file mode 100644 index 0000000000..023aa35ed6 --- /dev/null +++ b/ApplicationCode/ProjectDataModel/Annotations/RimLineBasedAnnotation.h @@ -0,0 +1,63 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2011- Statoil ASA +// Copyright (C) 2013- Ceetron Solutions AS +// Copyright (C) 2011-2012 Ceetron AS +// +// 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 "RimAnnotationLineAppearance.h" + +#include "cafPdmChildArrayField.h" +#include "cafPdmField.h" +#include "cafPdmObject.h" +#include "cafPdmPointer.h" +#include "cafAppEnum.h" +#include "cafPdmUiOrdering.h" + +// Include to make Pdm work for cvf::Color +#include "cafPdmFieldCvfColor.h" +#include "cafPdmChildField.h" +#include "cafPdmFieldCvfVec3d.h" + +#include "cvfObject.h" +#include "cvfVector3.h" + +#include + +class QString; +class RimGridView; + + +//================================================================================================== +/// +/// +//================================================================================================== +class RimLineBasedAnnotation : public caf::PdmObject +{ + CAF_PDM_HEADER_INIT; + +public: + RimLineBasedAnnotation(); + RimAnnotationLineAppearance* appearance() const; + +protected: + void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override {}; + +private: + caf::PdmChildField m_appearance; +}; diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesAnnotation.cpp b/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesAnnotation.cpp index c87dbc6762..96ad24b071 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesAnnotation.cpp +++ b/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesAnnotation.cpp @@ -105,6 +105,9 @@ void RimUserDefinedPolylinesAnnotation::defineUiOrdering(QString uiConfigName, c { uiOrdering.add(&m_points); + auto appearanceGroup = uiOrdering.addNewGroup("Line Appearance"); + appearance()->defineUiOrdering(uiConfigName, *appearanceGroup); + uiOrdering.skipRemainingFields(true); } @@ -269,6 +272,32 @@ void RimPolylinesFromFileAnnotation::setDescriptionFromFileName() } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimPolylinesFromFileAnnotation::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) +{ + auto appearanceGroup = uiOrdering.addNewGroup("Line Appearance"); + appearance()->defineUiOrdering(uiConfigName, *appearanceGroup); + + uiOrdering.skipRemainingFields(true); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimPolylinesFromFileAnnotation::fieldChangedByUi(const caf::PdmFieldHandle* changedField, + const QVariant& oldValue, + const QVariant& newValue) +{ + RimAnnotationCollection* annColl = nullptr; + this->firstAncestorOrThisOfType(annColl); + if (annColl) + { + annColl->scheduleRedrawOfRelevantViews(); + } +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesAnnotation.h b/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesAnnotation.h index 359314d17c..830378917f 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesAnnotation.h +++ b/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesAnnotation.h @@ -17,6 +17,7 @@ ///////////////////////////////////////////////////////////////////////////////// #pragma once +#include "RimLineBasedAnnotation.h" #include "cafPdmChildArrayField.h" #include "cafPdmField.h" @@ -43,7 +44,7 @@ class RigPolyLinesData; /// /// //================================================================================================== -class RimPolylinesAnnotation : public caf::PdmObject +class RimPolylinesAnnotation : public RimLineBasedAnnotation// caf::PdmObject { using Vec3d = cvf::Vec3d; @@ -113,6 +114,10 @@ public: void updateFilePathsFromProjectPath(const QString& newProjectPath, const QString& oldProjectPath); void setDescriptionFromFileName(); +protected: + void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override; + void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; + private: virtual caf::PdmFieldHandle* userDescriptionField() override; diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimReachCircleAnnotation.cpp b/ApplicationCode/ProjectDataModel/Annotations/RimReachCircleAnnotation.cpp index 8cd3041da4..f23c9c2b46 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimReachCircleAnnotation.cpp +++ b/ApplicationCode/ProjectDataModel/Annotations/RimReachCircleAnnotation.cpp @@ -39,6 +39,8 @@ #include "RimWellLogFile.h" #include "RimWellPath.h" #include "RimPerforationCollection.h" +#include "RimFileWellPath.h" +#include "RimModeledWellPath.h" #include "Riu3DMainWindowTools.h" @@ -55,8 +57,7 @@ #include #include -#include "RimFileWellPath.h" -#include "RimModeledWellPath.h" +#include CAF_PDM_SOURCE_INIT(RimReachCircleAnnotation, "RimReachCircleAnnotation"); @@ -97,6 +98,9 @@ void RimReachCircleAnnotation::defineUiOrdering(QString uiConfigName, caf::PdmUi uiOrdering.add(&m_centerPoint); uiOrdering.add(&m_radius); + auto appearanceGroup = uiOrdering.addNewGroup("Line Appearance"); + appearance()->defineUiOrdering(uiConfigName, *appearanceGroup); + uiOrdering.skipRemainingFields(true); } @@ -110,7 +114,11 @@ void RimReachCircleAnnotation::fieldChangedByUi(const caf::PdmFieldHandle* chang auto views = gridViewsContainingAnnotations(); if (!views.empty()) { - if (changedField == &m_centerPoint || changedField == &m_radius) + if (changedField == &m_centerPoint || + changedField == &m_radius || + changedField == appearance()->colorField() || + changedField == appearance()->styleField() || + changedField == appearance()->thicknessField()) { for (auto& view : views) { diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimReachCircleAnnotation.h b/ApplicationCode/ProjectDataModel/Annotations/RimReachCircleAnnotation.h index e8c9dbe022..b24d278c20 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimReachCircleAnnotation.h +++ b/ApplicationCode/ProjectDataModel/Annotations/RimReachCircleAnnotation.h @@ -20,6 +20,9 @@ #pragma once +#include "RimAnnotationLineAppearance.h" +#include "RimLineBasedAnnotation.h" + #include "cafPdmChildArrayField.h" #include "cafPdmField.h" #include "cafPdmObject.h" @@ -45,7 +48,7 @@ class RimGridView; /// /// //================================================================================================== -class RimReachCircleAnnotation : public caf::PdmObject +class RimReachCircleAnnotation : public RimLineBasedAnnotation { using Vec3d = cvf::Vec3d;