From 9dc1e8d0631e8b5d98ceb4e5d907887e2aa95f13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Jensen?= Date: Thu, 29 Nov 2018 10:13:19 +0100 Subject: [PATCH] #3778 Annotations. Move z plane settings to in-view collection --- .../RivAnnotationsPartMgr.cpp | 37 ++---------------- .../RivAnnotationsPartMgr.h | 19 ++-------- .../RivPolylineAnnotationPartMgr.cpp | 15 ++++---- .../RivPolylineAnnotationPartMgr.h | 7 ++-- .../RivReachCircleAnnotationPartMgr.cpp | 17 +++++---- .../RivReachCircleAnnotationPartMgr.h | 7 ++-- .../RivTextAnnotationPartMgr.cpp | 17 +++++---- .../RivTextAnnotationPartMgr.h | 7 ++-- .../Annotations/RimAnnotationCollection.cpp | 38 ------------------- .../Annotations/RimAnnotationCollection.h | 10 ----- .../RimAnnotationInViewCollection.cpp | 37 ++++++++++++++---- .../RimAnnotationInViewCollection.h | 9 ++++- 12 files changed, 81 insertions(+), 139 deletions(-) diff --git a/ApplicationCode/ModelVisualization/RivAnnotationsPartMgr.cpp b/ApplicationCode/ModelVisualization/RivAnnotationsPartMgr.cpp index 0fe767a41f..1de3be3475 100644 --- a/ApplicationCode/ModelVisualization/RivAnnotationsPartMgr.cpp +++ b/ApplicationCode/ModelVisualization/RivAnnotationsPartMgr.cpp @@ -24,41 +24,12 @@ #include "RiaApplication.h" -#include "RigActiveCellInfo.h" -#include "RigCell.h" -#include "RigEclipseCaseData.h" -#include "RigMainGrid.h" -#include "RigSimWellData.h" - -#include "RimTextAnnotation.h" -#include "RimReachCircleAnnotation.h" -#include "RimPolylinesAnnotation.h" -#include "RimAnnotationInViewCollection.h" -#include "RimEclipseCase.h" -#include "RimEclipseView.h" +#include "Rim3dView.h" #include "RimProject.h" -#include "RimSimWellInViewCollection.h" -#include "RimSimWellInView.h" #include "RivTextAnnotationPartMgr.h" #include "RivReachCircleAnnotationPartMgr.h" #include "RivPolylineAnnotationPartMgr.h" -#include "RivPipeGeometryGenerator.h" -#include "RivPartPriority.h" -#include "RivSimWellPipeSourceInfo.h" - -#include "cafEffectGenerator.h" - -#include "cvfArrowGenerator.h" -#include "cvfDrawableGeo.h" -#include "cvfDrawableText.h" -#include "cvfGeometryBuilderFaceList.h" -#include "cvfModelBasicList.h" -#include "cvfPart.h" -#include "cvfTransform.h" -#include "cvfqtUtils.h" -#include "cafDisplayCoordTransform.h" -#include "RivSectionFlattner.h" //-------------------------------------------------------------------------------------------------- @@ -115,7 +86,7 @@ void RivAnnotationsPartMgr::createAnnotationPartManagers() { for (auto annotation : textAnnotations) { - auto* apm = new RivTextAnnotationPartMgr(annotation); + auto* apm = new RivTextAnnotationPartMgr(m_rimView, annotation); m_textAnnotationPartMgrs.push_back(apm); //m_mapFromViewToIndex[wellPath] = wppm; } @@ -124,7 +95,7 @@ void RivAnnotationsPartMgr::createAnnotationPartManagers() { for (auto annotation : reachCircleAnnotations) { - auto* apm = new RivReachCircleAnnotationPartMgr(annotation); + auto* apm = new RivReachCircleAnnotationPartMgr(m_rimView, annotation); m_reachCircleAnnotationPartMgrs.push_back(apm); // m_mapFromViewToIndex[wellPath] = wppm; } @@ -133,7 +104,7 @@ void RivAnnotationsPartMgr::createAnnotationPartManagers() { for (auto annotation : polylineAnnotations) { - auto* apm = new RivPolylineAnnotationPartMgr(annotation); + auto* apm = new RivPolylineAnnotationPartMgr(m_rimView, annotation); m_polylineAnnotationPartMgrs.push_back(apm); // m_mapFromViewToIndex[wellPath] = wppm; } diff --git a/ApplicationCode/ModelVisualization/RivAnnotationsPartMgr.h b/ApplicationCode/ModelVisualization/RivAnnotationsPartMgr.h index 7de134b0d2..752982aa55 100644 --- a/ApplicationCode/ModelVisualization/RivAnnotationsPartMgr.h +++ b/ApplicationCode/ModelVisualization/RivAnnotationsPartMgr.h @@ -52,29 +52,16 @@ public: ~RivAnnotationsPartMgr() override; void appendGeometryPartsToModel(cvf::ModelBasicList* model, - const caf::DisplayCoordTransform* displayCoordTransform); - - //void appendDynamicGeometryPartsToModel(cvf::ModelBasicList* model, - // size_t frameIndex, - // const caf::DisplayCoordTransform * displayXf); - //void appendFlattenedDynamicGeometryPartsToModel(cvf::ModelBasicList* model, - // size_t frameIndex, - // const caf::DisplayCoordTransform * displayXf, - // double xOffset); + const caf::DisplayCoordTransform* displayCoordTransform); void clearGeometryCache(); private: - void createAnnotationPartManagers(); - - //void buildWellHeadParts(size_t frameIndex, - // const caf::DisplayCoordTransform * displayXf, - // bool doFlatten, - // double xOffset); + void createAnnotationPartManagers(); private: - caf::PdmPointer m_rimView; + caf::PdmPointer m_rimView; cvf::Collection m_textAnnotationPartMgrs; cvf::Collection m_reachCircleAnnotationPartMgrs; cvf::Collection m_polylineAnnotationPartMgrs; diff --git a/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.cpp b/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.cpp index 022b397f2a..adbd0b056a 100644 --- a/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.cpp +++ b/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.cpp @@ -18,6 +18,7 @@ #include "RivPolylineAnnotationPartMgr.h" +#include "Rim3dView.h" #include "RimAnnotationCollection.h" #include "RimPolylinesAnnotation.h" #include "RimAnnotationInViewCollection.h" @@ -42,8 +43,8 @@ //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RivPolylineAnnotationPartMgr::RivPolylineAnnotationPartMgr(RimPolylinesAnnotation* annotation) -: m_rimAnnotation(annotation) +RivPolylineAnnotationPartMgr::RivPolylineAnnotationPartMgr(Rim3dView* view, RimPolylinesAnnotation* annotation) +: m_rimView(view), m_rimAnnotation(annotation) { } @@ -70,7 +71,7 @@ void RivPolylineAnnotationPartMgr::buildPolylineAnnotationParts(const caf::Displ auto lineThickness = m_rimAnnotation->appearance()->thickness(); auto linesInDisplayCoords = pointsInDomain->polyLines(); - auto* collection = dynamic_cast(annotationCollection()); + auto* collection = annotationCollection(); for (auto& line : linesInDisplayCoords) { @@ -115,11 +116,11 @@ void RivPolylineAnnotationPartMgr::clearAllGeometry() //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RimAnnotationCollectionBase* RivPolylineAnnotationPartMgr::annotationCollection() const +RimAnnotationInViewCollection* RivPolylineAnnotationPartMgr::annotationCollection() const { - RimAnnotationCollectionBase* coll; - m_rimAnnotation->firstAncestorOrThisOfType(coll); - return coll; + std::vector colls; + m_rimView->descendantsIncludingThisOfType(colls); + return !colls.empty() ? colls.front() : nullptr; } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.h b/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.h index 7d4c77f9b1..2e6d672724 100644 --- a/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.h +++ b/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.h @@ -37,13 +37,13 @@ namespace caf class Rim3dView; class RimPolylinesAnnotation; -class RimAnnotationCollectionBase; +class RimAnnotationInViewCollection; class RivPolylineAnnotationPartMgr : public cvf::Object { public: - RivPolylineAnnotationPartMgr( RimPolylinesAnnotation* annotation); + RivPolylineAnnotationPartMgr(Rim3dView* view, RimPolylinesAnnotation* annotation); ~RivPolylineAnnotationPartMgr() override; void appendDynamicGeometryPartsToModel(cvf::ModelBasicList* model, @@ -52,8 +52,9 @@ private: void buildPolylineAnnotationParts(const caf::DisplayCoordTransform* displayXf); void clearAllGeometry(); - RimAnnotationCollectionBase* annotationCollection() const; + RimAnnotationInViewCollection* annotationCollection() const; + caf::PdmPointer m_rimView; caf::PdmPointer m_rimAnnotation; cvf::ref m_part; }; diff --git a/ApplicationCode/ModelVisualization/RivReachCircleAnnotationPartMgr.cpp b/ApplicationCode/ModelVisualization/RivReachCircleAnnotationPartMgr.cpp index 1123ea29f7..de3643cd67 100644 --- a/ApplicationCode/ModelVisualization/RivReachCircleAnnotationPartMgr.cpp +++ b/ApplicationCode/ModelVisualization/RivReachCircleAnnotationPartMgr.cpp @@ -22,7 +22,8 @@ #include "RivReachCircleAnnotationPartMgr.h" -#include "RimAnnotationCollection.h" +#include "Rim3dView.h" +#include "RimAnnotationInViewCollection.h" #include "RimReachCircleAnnotation.h" #include "RivPolylineGenerator.h" @@ -41,8 +42,8 @@ //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RivReachCircleAnnotationPartMgr::RivReachCircleAnnotationPartMgr(RimReachCircleAnnotation* annotation) -: m_rimAnnotation(annotation) +RivReachCircleAnnotationPartMgr::RivReachCircleAnnotationPartMgr(Rim3dView* view, RimReachCircleAnnotation* annotation) +: m_rimView(view), m_rimAnnotation(annotation) { } @@ -66,7 +67,7 @@ void RivReachCircleAnnotationPartMgr::buildParts(const caf::DisplayCoordTransfor Vec3d centerPositionInDomain = m_rimAnnotation->centerPoint(); { - auto* collection = dynamic_cast(annotationCollection()); + auto* collection = annotationCollection(); if (collection && collection->snapAnnotations()) { centerPositionInDomain.z() = collection->annotationPlaneZ(); @@ -172,9 +173,9 @@ bool RivReachCircleAnnotationPartMgr::validateAnnotation(const RimReachCircleAnn //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RimAnnotationCollectionBase* RivReachCircleAnnotationPartMgr::annotationCollection() const +RimAnnotationInViewCollection* RivReachCircleAnnotationPartMgr::annotationCollection() const { - RimAnnotationCollectionBase* coll; - m_rimAnnotation->firstAncestorOrThisOfType(coll); - return coll; + std::vector colls; + m_rimView->descendantsIncludingThisOfType(colls); + return !colls.empty() ? colls.front() : nullptr; } diff --git a/ApplicationCode/ModelVisualization/RivReachCircleAnnotationPartMgr.h b/ApplicationCode/ModelVisualization/RivReachCircleAnnotationPartMgr.h index b3c545f67c..504ead5d07 100644 --- a/ApplicationCode/ModelVisualization/RivReachCircleAnnotationPartMgr.h +++ b/ApplicationCode/ModelVisualization/RivReachCircleAnnotationPartMgr.h @@ -39,14 +39,14 @@ namespace caf class Rim3dView; class RimReachCircleAnnotation; -class RimAnnotationCollectionBase; +class RimAnnotationInViewCollection; class RivReachCircleAnnotationPartMgr : public cvf::Object { using Vec3d = cvf::Vec3d; public: - RivReachCircleAnnotationPartMgr( RimReachCircleAnnotation* annotation); + RivReachCircleAnnotationPartMgr(Rim3dView* view, RimReachCircleAnnotation* annotation); ~RivReachCircleAnnotationPartMgr() override; void appendDynamicGeometryPartsToModel(cvf::ModelBasicList* model, const caf::DisplayCoordTransform* displayXf); @@ -57,8 +57,9 @@ private: void clearAllGeometry(); bool validateAnnotation(const RimReachCircleAnnotation* annotation) const; - RimAnnotationCollectionBase* annotationCollection() const; + RimAnnotationInViewCollection* annotationCollection() const; + caf::PdmPointer m_rimView; caf::PdmPointer m_rimAnnotation; cvf::ref m_circlePart; cvf::ref m_centerPointPart; diff --git a/ApplicationCode/ModelVisualization/RivTextAnnotationPartMgr.cpp b/ApplicationCode/ModelVisualization/RivTextAnnotationPartMgr.cpp index 2996dcbf45..fe2a9606ba 100644 --- a/ApplicationCode/ModelVisualization/RivTextAnnotationPartMgr.cpp +++ b/ApplicationCode/ModelVisualization/RivTextAnnotationPartMgr.cpp @@ -26,7 +26,8 @@ #include "RiaColorTools.h" #include "RiaPreferences.h" -#include "RimAnnotationCollection.h" +#include "Rim3dView.h" +#include "RimAnnotationInViewCollection.h" #include "RimTextAnnotation.h" #include "RivPolylineGenerator.h" @@ -46,8 +47,8 @@ //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RivTextAnnotationPartMgr::RivTextAnnotationPartMgr(RimTextAnnotation* annotation) -: m_rimAnnotation(annotation) +RivTextAnnotationPartMgr::RivTextAnnotationPartMgr(Rim3dView* view, RimTextAnnotation* annotation) +: m_rimView(view), m_rimAnnotation(annotation) { } @@ -74,7 +75,7 @@ void RivTextAnnotationPartMgr::buildParts(const caf::DisplayCoordTransform * dis cvf::Vec3d labelPositionInDomain = m_rimAnnotation->labelPoint(); { - auto* collection = dynamic_cast(annotationCollection()); + auto* collection = annotationCollection(); if (collection && collection->snapAnnotations()) { anchorPositionInDomain.z() = collection->annotationPlaneZ(); @@ -175,9 +176,9 @@ bool RivTextAnnotationPartMgr::validateAnnotation(const RimTextAnnotation* annot //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -RimAnnotationCollectionBase* RivTextAnnotationPartMgr::annotationCollection() const +RimAnnotationInViewCollection* RivTextAnnotationPartMgr::annotationCollection() const { - RimAnnotationCollectionBase* coll; - m_rimAnnotation->firstAncestorOrThisOfType(coll); - return coll; + std::vector colls; + m_rimView->descendantsIncludingThisOfType(colls); + return !colls.empty() ? colls.front() : nullptr; } diff --git a/ApplicationCode/ModelVisualization/RivTextAnnotationPartMgr.h b/ApplicationCode/ModelVisualization/RivTextAnnotationPartMgr.h index 9477543689..9ed153093e 100644 --- a/ApplicationCode/ModelVisualization/RivTextAnnotationPartMgr.h +++ b/ApplicationCode/ModelVisualization/RivTextAnnotationPartMgr.h @@ -36,7 +36,7 @@ namespace caf } class Rim3dView; -class RimAnnotationCollectionBase; +class RimAnnotationInViewCollection; class RimTextAnnotation; class RimSimWellInView; class RimSimWellInViewCollection; @@ -44,7 +44,7 @@ class RimSimWellInViewCollection; class RivTextAnnotationPartMgr : public cvf::Object { public: - RivTextAnnotationPartMgr( RimTextAnnotation* annotation); + RivTextAnnotationPartMgr(Rim3dView* view, RimTextAnnotation* annotation); ~RivTextAnnotationPartMgr() override; void appendDynamicGeometryPartsToModel(cvf::ModelBasicList* model, @@ -58,8 +58,9 @@ private: void clearAllGeometry(); bool validateAnnotation(const RimTextAnnotation* annotation) const; - RimAnnotationCollectionBase* annotationCollection() const; + RimAnnotationInViewCollection* annotationCollection() const; + caf::PdmPointer m_rimView; caf::PdmPointer m_rimAnnotation; cvf::ref m_linePart; cvf::ref< cvf::Part > m_labelPart; diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationCollection.cpp b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationCollection.cpp index d3c361b95a..b7c99941a0 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationCollection.cpp +++ b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationCollection.cpp @@ -50,9 +50,6 @@ RimAnnotationCollection::RimAnnotationCollection() m_userDefinedPolylineAnnotations.uiCapability()->setUiHidden(true); CAF_PDM_InitFieldNoDefault(&m_polylineFromFileAnnotations, "PolylineFromFileAnnotations", "Polylines From File", "", "", ""); m_polylineFromFileAnnotations.uiCapability()->setUiHidden(true); - - CAF_PDM_InitField(&m_annotationPlaneDepth, "AnnotationPlaneDepth", 0.0,"Annotation Plane Depth", "", "", ""); - CAF_PDM_InitField(&m_snapAnnotations, "SnapAnnotations", false, "Snap Annotations to Plane", "", "", ""); } @@ -88,22 +85,6 @@ void RimAnnotationCollection::addAnnotation(RimPolylinesFromFileAnnotation* anno m_polylineFromFileAnnotations.push_back(annotation); } -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -double RimAnnotationCollection::annotationPlaneZ() const -{ - return -m_annotationPlaneDepth(); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -bool RimAnnotationCollection::snapAnnotations() const -{ - return m_snapAnnotations; -} - //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -218,25 +199,6 @@ void RimAnnotationCollection::reloadPolylinesFromFile(const std::vector& polyLinesObjsToReload); caf::PdmChildArrayField m_reachCircleAnnotations; caf::PdmChildArrayField m_userDefinedPolylineAnnotations; caf::PdmChildArrayField m_polylineFromFileAnnotations; - - caf::PdmField m_annotationPlaneDepth; - caf::PdmField m_snapAnnotations; }; diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationInViewCollection.cpp b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationInViewCollection.cpp index 206f33fe68..0ce5f1469a 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationInViewCollection.cpp +++ b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationInViewCollection.cpp @@ -36,6 +36,9 @@ RimAnnotationInViewCollection::RimAnnotationInViewCollection() CAF_PDM_InitField(&m_isActive, "Active", true, "Active", "", "", ""); m_isActive.uiCapability()->setUiHidden(true); + + CAF_PDM_InitField(&m_annotationPlaneDepth, "AnnotationPlaneDepth", 0.0, "Annotation Plane Depth", "", "", ""); + CAF_PDM_InitField(&m_snapAnnotations, "SnapAnnotations", false, "Snap Annotations to Plane", "", "", ""); } //-------------------------------------------------------------------------------------------------- @@ -53,6 +56,31 @@ bool RimAnnotationInViewCollection::isActive() const return m_isActive(); } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +double RimAnnotationInViewCollection::annotationPlaneZ() const +{ + return -m_annotationPlaneDepth(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimAnnotationInViewCollection::snapAnnotations() const +{ + return m_snapAnnotations; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimAnnotationInViewCollection::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) +{ + uiOrdering.add(&m_annotationPlaneDepth); + uiOrdering.add(&m_snapAnnotations); +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -61,15 +89,8 @@ void RimAnnotationInViewCollection::fieldChangedByUi(const caf::PdmFieldHandle* if (&m_isActive == changedField) { this->updateUiIconFromToggleField(); - - RimGridView* view; - firstAncestorOrThisOfType(view); - if (view) - { - //view->hasUserRequestedAnimation = true; - view->scheduleCreateDisplayModelAndRedraw(); - } } + scheduleRedrawOfRelevantViews(); } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationInViewCollection.h b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationInViewCollection.h index 5eb0a452ba..bc842c9659 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationInViewCollection.h +++ b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationInViewCollection.h @@ -41,12 +41,17 @@ public: RimAnnotationInViewCollection(); ~RimAnnotationInViewCollection() override; - bool isActive() const; + bool isActive() const; + double annotationPlaneZ() const; + bool snapAnnotations() const; protected: + void defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) override; void fieldChangedByUi(const caf::PdmFieldHandle* changedField, const QVariant& oldValue, const QVariant& newValue) override; caf::PdmFieldHandle* objectToggleField() override; private: - caf::PdmField m_isActive; + caf::PdmField m_isActive; + caf::PdmField m_annotationPlaneDepth; + caf::PdmField m_snapAnnotations; };