From 8401e3d9f0a2081958cf07964dca9c8bab6313be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Jensen?= Date: Fri, 14 Dec 2018 15:32:32 +0100 Subject: [PATCH] #3868 Annotations. Draw spheres on polylines + toggles conotrolling visibility --- .../RicCreateReachCircleAnnotationFeature.cpp | 1 + ...eUserDefinedPolylinesAnnotationFeature.cpp | 2 + .../Commands/RicDeleteItemFeature.cpp | 6 +- .../RivPolylineAnnotationPartMgr.cpp | 109 +++++++++++++++--- .../RivPolylineAnnotationPartMgr.h | 3 +- .../Annotations/CMakeLists_files.cmake | 2 - .../Annotations/RimAnnotationCollection.cpp | 1 + .../RimAnnotationLineAppearance.cpp | 74 +++++++++++- .../Annotations/RimAnnotationLineAppearance.h | 35 ++++++ .../Annotations/RimLineBasedAnnotation.cpp | 77 ------------- .../Annotations/RimLineBasedAnnotation.h | 52 --------- .../Annotations/RimPolylinesAnnotation.cpp | 65 +++++++++++ .../Annotations/RimPolylinesAnnotation.h | 23 +++- .../Annotations/RimReachCircleAnnotation.cpp | 47 +++++++- .../Annotations/RimReachCircleAnnotation.h | 16 ++- .../RimReachCircleAnnotationInView.h | 1 - .../RimUserDefinedPolylinesAnnotation.cpp | 5 +- 17 files changed, 355 insertions(+), 164 deletions(-) delete mode 100644 ApplicationCode/ProjectDataModel/Annotations/RimLineBasedAnnotation.cpp delete mode 100644 ApplicationCode/ProjectDataModel/Annotations/RimLineBasedAnnotation.h diff --git a/ApplicationCode/Commands/AnnotationCommands/RicCreateReachCircleAnnotationFeature.cpp b/ApplicationCode/Commands/AnnotationCommands/RicCreateReachCircleAnnotationFeature.cpp index 7608e8ef11..987158177a 100644 --- a/ApplicationCode/Commands/AnnotationCommands/RicCreateReachCircleAnnotationFeature.cpp +++ b/ApplicationCode/Commands/AnnotationCommands/RicCreateReachCircleAnnotationFeature.cpp @@ -27,6 +27,7 @@ #include "RimAnnotationCollection.h" #include "RimAnnotationGroupCollection.h" #include "RimAnnotationInViewCollection.h" +#include "RimAnnotationLineAppearance.h" #include "RimProject.h" #include "RimOilField.h" diff --git a/ApplicationCode/Commands/AnnotationCommands/RicCreateUserDefinedPolylinesAnnotationFeature.cpp b/ApplicationCode/Commands/AnnotationCommands/RicCreateUserDefinedPolylinesAnnotationFeature.cpp index 80f8ab35a8..6f9982c821 100644 --- a/ApplicationCode/Commands/AnnotationCommands/RicCreateUserDefinedPolylinesAnnotationFeature.cpp +++ b/ApplicationCode/Commands/AnnotationCommands/RicCreateUserDefinedPolylinesAnnotationFeature.cpp @@ -27,6 +27,7 @@ #include "RimAnnotationCollection.h" #include "RimAnnotationGroupCollection.h" #include "RimAnnotationInViewCollection.h" +#include "RimAnnotationLineAppearance.h" #include "RimProject.h" #include "RimOilField.h" @@ -63,6 +64,7 @@ void RicCreateUserDefinedPolylinesAnnotationFeature::onActionTriggered(bool isCh auto newAnnotation = new RimUserDefinedPolylinesAnnotation(); auto newColor = RiaColorTables::categoryPaletteColors().cycledColor3f(coll->lineBasedAnnotationsCount()); newAnnotation->appearance()->setColor(newColor); + newAnnotation->appearance()->setSphereColor(newColor); newAnnotation->enablePicking(true); coll->addAnnotation(newAnnotation); coll->updateConnectedEditors(); diff --git a/ApplicationCode/Commands/RicDeleteItemFeature.cpp b/ApplicationCode/Commands/RicDeleteItemFeature.cpp index a05ba913fe..38e331064b 100644 --- a/ApplicationCode/Commands/RicDeleteItemFeature.cpp +++ b/ApplicationCode/Commands/RicDeleteItemFeature.cpp @@ -54,7 +54,8 @@ #include "RimWellRftPlot.h" #include "RimWellPathValve.h" #include "RimTextAnnotation.h" -#include "RimLineBasedAnnotation.h" +#include "RimReachCircleAnnotation.h" +#include "RimPolylinesAnnotation.h" #include "RimEllipseFractureTemplate.h" #include "RimSimWellFracture.h" #include "RimSimWellFractureCollection.h" @@ -127,7 +128,8 @@ bool isDeletable(caf::PdmUiItem* uiItem) if (dynamic_cast(uiItem)) return true; if (dynamic_cast(uiItem)) return true; if (dynamic_cast(uiItem)) return true; - if (dynamic_cast(uiItem)) return true; + if (dynamic_cast(uiItem)) return true; + if (dynamic_cast(uiItem)) return true; return false; } diff --git a/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.cpp b/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.cpp index 384509e414..77a3a9ad5a 100644 --- a/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.cpp +++ b/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.cpp @@ -18,6 +18,7 @@ #include "RivPolylineAnnotationPartMgr.h" +#include "RiaApplication.h" #include "RiaBoundingBoxTools.h" #include "Rim3dView.h" @@ -42,6 +43,9 @@ #include "cvfPart.h" #include "cvfTransform.h" #include "cafDisplayCoordTransform.h" +#include "cvfGeometryBuilderTriangles.h" +#include "cvfGeometryUtils.h" +#include "cvfDrawableVectors.h" //-------------------------------------------------------------------------------------------------- /// @@ -79,23 +83,90 @@ void RivPolylineAnnotationPartMgr::buildPolylineAnnotationParts(const caf::Displ auto linesInDomain = getPolylinesPointsInDomain(collection->snapAnnotations(), collection->annotationPlaneZ()); auto linesInDisplay = transformPolylinesPointsToDisplay(linesInDomain, displayXf); - cvf::ref drawableGeo = RivPolylineGenerator::createLineAlongPolylineDrawable(linesInDisplay, rimAnnotation->closePolyline()); - cvf::ref part = new cvf::Part; - part->setName("RivPolylineAnnotationPartMgr"); - part->setDrawable(drawableGeo.p()); + // Line part + if(rimAnnotation->showLines()) + { + cvf::ref drawableGeo = RivPolylineGenerator::createLineAlongPolylineDrawable(linesInDisplay, rimAnnotation->closePolyline()); + cvf::ref part = new cvf::Part; + part->setName("RivPolylineAnnotationPartMgr"); + part->setDrawable(drawableGeo.p()); - caf::MeshEffectGenerator effgen(lineColor); - effgen.setLineWidth(lineThickness); - if (isDashedLine) effgen.setLineStipple(true); - cvf::ref eff = effgen.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); + part->setEffect(eff.p()); + part->setPriority(RivPartPriority::PartType::MeshLines); - cvf::ref sourceInfo = new RivPolylinesAnnotationSourceInfo(rimAnnotation); - part->setSourceInfo(sourceInfo.p()); + cvf::ref sourceInfo = new RivPolylinesAnnotationSourceInfo(rimAnnotation); + part->setSourceInfo(sourceInfo.p()); - m_part = part; + m_linePart = part; + } + + // Sphere part + if(rimAnnotation->showSpheres()) + { + auto sphereColor = rimAnnotation->appearance()->sphereColor(); + int sphereRadius = rimAnnotation->appearance()->sphereRadius(); + + cvf::ref vertices = new cvf::Vec3fArray; + cvf::ref vecRes = new cvf::Vec3fArray; + cvf::ref colors = new cvf::Color3fArray; + vertices->reserve(linesInDisplay.front().size()); + vecRes->reserve(linesInDisplay.front().size()); + colors->reserve(linesInDisplay.front().size()); + + for (const auto& v : linesInDisplay.front()) + { + vertices->add(cvf::Vec3f(v)); + vecRes->add(cvf::Vec3f::X_AXIS); + colors->add(sphereColor); + } + + cvf::ref vectorDrawable; + if (RiaApplication::instance()->useShaders()) + { + // NOTE: Drawable vectors must be rendered using shaders when the rest of the application is rendered using + // shaders Drawing vectors using fixed function when rest of the application uses shaders causes visual artifacts + vectorDrawable = new cvf::DrawableVectors("u_transformationMatrix", "u_color"); + } + else + { + vectorDrawable = new cvf::DrawableVectors(); + } + + vectorDrawable->setVectors(vertices.p(), vecRes.p()); + vectorDrawable->setColors(colors.p()); + + cvf::GeometryBuilderTriangles builder; + cvf::GeometryUtils::createSphere(sphereRadius, 15, 15, &builder); + vectorDrawable->setGlyph(builder.trianglesUShort().p(), builder.vertices().p()); + + + + //cvf::ref drawableGeo = RivPolylineGenerator::createPointsFromPolylineDrawable(linesInDisplay); + cvf::ref part = new cvf::Part; + part->setName("RivPolylineAnnotationPartMgr"); + //part->setDrawable(drawableGeo.p()); + part->setDrawable(vectorDrawable.p()); + + //caf::MeshEffectGenerator effgen(lineColor); + //effgen.setLineWidth(lineThickness); + //if (isDashedLine) effgen.setLineStipple(true); + //cvf::ref eff = effgen.generateCachedEffect(); + + part->setEffect(new cvf::Effect()); + + //part->setEffect(eff.p()); + part->setPriority(RivPartPriority::PartType::MeshLines); + + cvf::ref sourceInfo = new RivPolylinesAnnotationSourceInfo(rimAnnotation); + part->setSourceInfo(sourceInfo.p()); + + m_spherePart = part; + } } } @@ -168,7 +239,8 @@ bool RivPolylineAnnotationPartMgr::isPolylinesInBoundingBox(const cvf::BoundingB //-------------------------------------------------------------------------------------------------- void RivPolylineAnnotationPartMgr::clearAllGeometry() { - m_part = nullptr; + m_linePart = nullptr; + m_spherePart = nullptr; } //-------------------------------------------------------------------------------------------------- @@ -198,9 +270,14 @@ void RivPolylineAnnotationPartMgr::appendDynamicGeometryPartsToModel(cvf::ModelB buildPolylineAnnotationParts(displayXf); - if ( m_part.notNull() ) + if ( m_linePart.notNull() ) { - model->addPart(m_part.p()); + model->addPart(m_linePart.p()); + } + + if (m_spherePart.notNull()) + { + model->addPart(m_spherePart.p()); } } diff --git a/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.h b/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.h index d76e614eb0..d319870627 100644 --- a/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.h +++ b/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.h @@ -70,5 +70,6 @@ private: caf::PdmPointer m_rimView; caf::PdmPointer m_rimAnnotationInView; - cvf::ref m_part; + cvf::ref m_linePart; + cvf::ref m_spherePart; }; diff --git a/ApplicationCode/ProjectDataModel/Annotations/CMakeLists_files.cmake b/ApplicationCode/ProjectDataModel/Annotations/CMakeLists_files.cmake index 893b4aa87a..b32f471b2d 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/CMakeLists_files.cmake +++ b/ApplicationCode/ProjectDataModel/Annotations/CMakeLists_files.cmake @@ -10,7 +10,6 @@ ${CMAKE_CURRENT_LIST_DIR}/RimTextAnnotation.h ${CMAKE_CURRENT_LIST_DIR}/RimAnnotationInViewCollection.h ${CMAKE_CURRENT_LIST_DIR}/RimAnnotationLineAppearance.h ${CMAKE_CURRENT_LIST_DIR}/RimAnnotationTextAppearance.h -${CMAKE_CURRENT_LIST_DIR}/RimLineBasedAnnotation.h ${CMAKE_CURRENT_LIST_DIR}/RimPolylinesFromFileAnnotationInView.h ${CMAKE_CURRENT_LIST_DIR}/RimUserDefinedPolylinesAnnotationInView.h ${CMAKE_CURRENT_LIST_DIR}/RimPolylinesAnnotationInView.h @@ -31,7 +30,6 @@ ${CMAKE_CURRENT_LIST_DIR}/RimTextAnnotation.cpp ${CMAKE_CURRENT_LIST_DIR}/RimAnnotationInViewCollection.cpp ${CMAKE_CURRENT_LIST_DIR}/RimAnnotationLineAppearance.cpp ${CMAKE_CURRENT_LIST_DIR}/RimAnnotationTextAppearance.cpp -${CMAKE_CURRENT_LIST_DIR}/RimLineBasedAnnotation.cpp ${CMAKE_CURRENT_LIST_DIR}/RimPolylinesFromFileAnnotationInView.cpp ${CMAKE_CURRENT_LIST_DIR}/RimUserDefinedPolylinesAnnotationInView.cpp ${CMAKE_CURRENT_LIST_DIR}/RimPolylinesAnnotationInView.cpp diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationCollection.cpp b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationCollection.cpp index 65c17f5de9..31d190c95a 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationCollection.cpp +++ b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationCollection.cpp @@ -26,6 +26,7 @@ #include "RimReachCircleAnnotation.h" #include "RimPolylinesFromFileAnnotation.h" #include "RimUserDefinedPolylinesAnnotation.h" +#include "RimAnnotationLineAppearance.h" #include "RimProject.h" #include "RimGridView.h" diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationLineAppearance.cpp b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationLineAppearance.cpp index c921a15610..8a12bb757b 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationLineAppearance.cpp +++ b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationLineAppearance.cpp @@ -40,10 +40,10 @@ CAF_PDM_SOURCE_INIT(RimAnnotationLineAppearance, "RimAnnotationLineAppearance"); //-------------------------------------------------------------------------------------------------- RimAnnotationLineAppearance::RimAnnotationLineAppearance() { - CAF_PDM_InitObject("TextAnnotation", ":/WellCollection.png", "", ""); + CAF_PDM_InitObject("AnnotationLineAppearance", ":/WellCollection.png", "", ""); - CAF_PDM_InitField(&m_color, "Color", cvf::Color3f(cvf::Color3f::BLACK), "Color", "", "", ""); - CAF_PDM_InitField(&m_thickness, "Thickness", 2, "Thickness", "", "", ""); + CAF_PDM_InitField(&m_color, "Color", cvf::Color3f(cvf::Color3f::BLACK), "Line Color", "", "", ""); + CAF_PDM_InitField(&m_thickness, "Thickness", 2, "Line Thickness", "", "", ""); // Stippling not yet supported. Needs new stuff in VizFwk CAF_PDM_InitField(&m_style, "Style", LineStyle(), "Style", "", "", ""); @@ -107,3 +107,71 @@ void RimAnnotationLineAppearance::fieldChangedByUi(const caf::PdmFieldHandle* ch this->firstAncestorOrThisOfTypeAsserted(annColl); annColl->scheduleRedrawOfRelevantViews(); } + +CAF_PDM_SOURCE_INIT(RimPolylineAppearance, "RimPolylineAppearance"); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimPolylineAppearance::RimPolylineAppearance() +{ + CAF_PDM_InitObject("PolylineAppearance", ":/WellCollection.png", "", ""); + + CAF_PDM_InitField(&m_sphereColor, "SphereColor", cvf::Color3f(cvf::Color3f::BLACK), "Sphere Color", "", "", ""); + CAF_PDM_InitField(&m_sphereRadius, "SphereRadius", 15, "Sphere Radius", "", "", ""); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimPolylineAppearance::setSphereColor(const cvf::Color3f& color) +{ + m_sphereColor = color; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +cvf::Color3f RimPolylineAppearance::sphereColor() const +{ + return m_sphereColor(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimPolylineAppearance::setSphereRadius(int radius) +{ + m_sphereRadius = radius; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +int RimPolylineAppearance::sphereRadius() const +{ + return m_sphereRadius(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimPolylineAppearance::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) +{ + RimAnnotationLineAppearance::defineUiOrdering(uiConfigName, uiOrdering); + + uiOrdering.add(&m_sphereColor); + uiOrdering.add(&m_sphereRadius); + + uiOrdering.skipRemainingFields(true); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RimPolylineAppearance::fieldChangedByUi(const caf::PdmFieldHandle* changedField, + const QVariant& oldValue, + const QVariant& newValue) +{ + RimAnnotationLineAppearance::fieldChangedByUi(changedField, oldValue, newValue); +} diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationLineAppearance.h b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationLineAppearance.h index f6594d5f58..c8625223a6 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationLineAppearance.h +++ b/ApplicationCode/ProjectDataModel/Annotations/RimAnnotationLineAppearance.h @@ -60,3 +60,38 @@ private: }; + +//================================================================================================== +/// +/// +//================================================================================================== +class RimReachCircleLineAppearance : public RimAnnotationLineAppearance +{ + +}; + + +//================================================================================================== +/// +/// +//================================================================================================== +class RimPolylineAppearance : public RimAnnotationLineAppearance +{ + CAF_PDM_HEADER_INIT; + +public: + RimPolylineAppearance(); + + void setSphereColor(const cvf::Color3f& color); + cvf::Color3f sphereColor() const; + void setSphereRadius(int radius); + int sphereRadius() const; + +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_sphereColor; + caf::PdmField m_sphereRadius; +}; diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimLineBasedAnnotation.cpp b/ApplicationCode/ProjectDataModel/Annotations/RimLineBasedAnnotation.cpp deleted file mode 100644 index 8672b43f57..0000000000 --- a/ApplicationCode/ProjectDataModel/Annotations/RimLineBasedAnnotation.cpp +++ /dev/null @@ -1,77 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) 2018- Equinor 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 "RimLineBasedAnnotation.h" - -#include "RimAnnotationLineAppearance.h" -#include "RimAnnotationCollectionBase.h" - - -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); - - CAF_PDM_InitField(&m_isActive, "IsActive", true, "Is Active", "", "", ""); - m_isActive.uiCapability()->setUiHidden(true); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -RimAnnotationLineAppearance* RimLineBasedAnnotation::appearance() const -{ - return m_appearance; -} -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -bool RimLineBasedAnnotation::isActive() -{ - return m_isActive(); -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -bool RimLineBasedAnnotation::isVisible() -{ - RimAnnotationCollectionBase* coll; - firstAncestorOrThisOfType(coll); - - return coll && coll->isActive() && m_isActive; -} - -//-------------------------------------------------------------------------------------------------- -/// -//-------------------------------------------------------------------------------------------------- -caf::PdmFieldHandle* RimLineBasedAnnotation::objectToggleField() -{ - return &m_isActive; -} - - - diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimLineBasedAnnotation.h b/ApplicationCode/ProjectDataModel/Annotations/RimLineBasedAnnotation.h deleted file mode 100644 index 633fd96996..0000000000 --- a/ApplicationCode/ProjectDataModel/Annotations/RimLineBasedAnnotation.h +++ /dev/null @@ -1,52 +0,0 @@ -///////////////////////////////////////////////////////////////////////////////// -// -// Copyright (C) 2018- Equinor 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 "cafPdmObject.h" - -#include "cafPdmChildField.h" -#include "cafPdmField.h" - -class RimGridView; -class RimAnnotationLineAppearance; - -//================================================================================================== -/// -/// -//================================================================================================== -class RimLineBasedAnnotation : public caf::PdmObject -{ - CAF_PDM_HEADER_INIT; - -public: - RimLineBasedAnnotation(); - RimAnnotationLineAppearance* appearance() const; - - bool isActive(); - bool isVisible(); - -protected: - virtual caf::PdmFieldHandle* objectToggleField() override; - -private: - caf::PdmField m_isActive; - -private: - caf::PdmChildField m_appearance; -}; diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesAnnotation.cpp b/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesAnnotation.cpp index aa26ca3bb4..724db98400 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesAnnotation.cpp +++ b/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesAnnotation.cpp @@ -24,6 +24,8 @@ #include "RimTools.h" #include "QFile" #include "RimAnnotationCollection.h" +#include "RimAnnotationLineAppearance.h" + #include "QFileInfo" CAF_PDM_ABSTRACT_SOURCE_INIT(RimPolylinesAnnotation, "RimPolylinesAnnotation"); @@ -35,7 +37,19 @@ RimPolylinesAnnotation::RimPolylinesAnnotation() { CAF_PDM_InitObject("PolylineAnnotation", ":/WellCollection.png", "", ""); + CAF_PDM_InitField(&m_isActive, "IsActive", true, "Is Active", "", "", ""); + m_isActive.uiCapability()->setUiHidden(true); + CAF_PDM_InitField(&m_closePolyline, "ClosePolyline", false, "Close Polyline", "", "", ""); + CAF_PDM_InitField(&m_showLines, "ShowLines", true, "Show Lines", "", "", ""); + CAF_PDM_InitField(&m_showSpheres, "ShowSpheres", false, "Show Spheres", "", "", ""); + + CAF_PDM_InitFieldNoDefault(&m_appearance, "Appearance", "Appearance", "", "", ""); + + m_appearance = new RimPolylineAppearance(); + m_appearance.uiCapability()->setUiTreeHidden(true); + m_appearance.uiCapability()->setUiTreeChildrenHidden(true); + } //-------------------------------------------------------------------------------------------------- @@ -46,6 +60,25 @@ RimPolylinesAnnotation::~RimPolylinesAnnotation() } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimPolylinesAnnotation::isActive() +{ + return m_isActive(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimPolylinesAnnotation::isVisible() +{ + RimAnnotationCollectionBase* coll; + firstAncestorOrThisOfType(coll); + + return coll && coll->isActive() && m_isActive; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -54,3 +87,35 @@ bool RimPolylinesAnnotation::closePolyline() const return m_closePolyline; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimPolylinesAnnotation::showLines() const +{ + return m_showLines; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimPolylinesAnnotation::showSpheres() const +{ + return m_showSpheres; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimPolylineAppearance* RimPolylinesAnnotation::appearance() const +{ + return m_appearance; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +caf::PdmFieldHandle* RimPolylinesAnnotation::objectToggleField() +{ + return &m_isActive; +} + diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesAnnotation.h b/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesAnnotation.h index 74f062c131..4405e951e6 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesAnnotation.h +++ b/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesAnnotation.h @@ -17,21 +17,22 @@ ///////////////////////////////////////////////////////////////////////////////// #pragma once -#include "RimLineBasedAnnotation.h" - +#include "cafPdmChildField.h" #include "cafPdmField.h" +#include "cafPdmObject.h" // Include to make Pdm work for cvf::Color #include "cvfBase.h" #include "cvfObject.h" class RigPolyLinesData; +class RimPolylineAppearance; //================================================================================================== /// /// //================================================================================================== -class RimPolylinesAnnotation : public RimLineBasedAnnotation +class RimPolylinesAnnotation : public caf::PdmObject { CAF_PDM_HEADER_INIT; @@ -42,8 +43,24 @@ public: virtual cvf::ref polyLinesData() = 0; virtual bool isEmpty() = 0; + bool isActive(); + bool isVisible(); + bool closePolyline() const; + bool showLines() const; + bool showSpheres() const; + + RimPolylineAppearance* appearance() const; protected: + virtual caf::PdmFieldHandle* objectToggleField() override; + +protected: + caf::PdmField m_isActive; + caf::PdmField m_closePolyline; + caf::PdmField m_showLines; + caf::PdmField m_showSpheres; + + caf::PdmChildField m_appearance; }; diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimReachCircleAnnotation.cpp b/ApplicationCode/ProjectDataModel/Annotations/RimReachCircleAnnotation.cpp index f637baab25..f9fb661f17 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimReachCircleAnnotation.cpp +++ b/ApplicationCode/ProjectDataModel/Annotations/RimReachCircleAnnotation.cpp @@ -19,6 +19,7 @@ #include "RimReachCircleAnnotation.h" #include "RimAnnotationInViewCollection.h" +#include "RimAnnotationLineAppearance.h" #include "RimGridView.h" #include "RimProject.h" #include "RimAnnotationCollection.h" @@ -34,9 +35,37 @@ RimReachCircleAnnotation::RimReachCircleAnnotation() { CAF_PDM_InitObject("CircleAnnotation", ":/ReachCircle16x16.png", "", ""); + CAF_PDM_InitField(&m_isActive, "IsActive", true, "Is Active", "", "", ""); + m_isActive.uiCapability()->setUiHidden(true); + CAF_PDM_InitField(&m_centerPointXyd, "CenterPointXyd", Vec3d::ZERO, "Center Point", "", "", ""); CAF_PDM_InitField(&m_radius, "Radius", 0.0, "Radius", "", "", ""); CAF_PDM_InitField(&m_name, "Name", QString("Circle Annotation"), "Name", "", "", ""); + + CAF_PDM_InitFieldNoDefault(&m_appearance, "Appearance", "Appearance", "", "", ""); + + m_appearance = new RimReachCircleLineAppearance(); + m_appearance.uiCapability()->setUiTreeHidden(true); + m_appearance.uiCapability()->setUiTreeChildrenHidden(true); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimReachCircleAnnotation::isActive() +{ + return m_isActive(); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimReachCircleAnnotation::isVisible() +{ + RimAnnotationCollectionBase* coll; + firstAncestorOrThisOfType(coll); + + return coll && coll->isActive() && m_isActive; } //-------------------------------------------------------------------------------------------------- @@ -65,6 +94,14 @@ QString RimReachCircleAnnotation::name() const return m_name; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimReachCircleLineAppearance* RimReachCircleAnnotation::appearance() const +{ + return m_appearance; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- @@ -74,7 +111,7 @@ void RimReachCircleAnnotation::defineUiOrdering(QString uiConfigName, caf::PdmUi uiOrdering.add(&m_centerPointXyd); uiOrdering.add(&m_radius); - auto appearanceGroup = uiOrdering.addNewGroup("Line Appearance"); + auto appearanceGroup = uiOrdering.addNewGroup("Appearance"); appearance()->uiOrdering(uiConfigName, *appearanceGroup); uiOrdering.skipRemainingFields(true); @@ -101,3 +138,11 @@ caf::PdmFieldHandle* RimReachCircleAnnotation::userDescriptionField() return &m_name; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +caf::PdmFieldHandle* RimReachCircleAnnotation::objectToggleField() +{ + return &m_isActive; +} + diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimReachCircleAnnotation.h b/ApplicationCode/ProjectDataModel/Annotations/RimReachCircleAnnotation.h index 1d2b5da384..7b4013d104 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimReachCircleAnnotation.h +++ b/ApplicationCode/ProjectDataModel/Annotations/RimReachCircleAnnotation.h @@ -18,9 +18,6 @@ #pragma once -#include "RimAnnotationLineAppearance.h" -#include "RimLineBasedAnnotation.h" - #include "cafPdmChildArrayField.h" #include "cafPdmField.h" #include "cafPdmObject.h" @@ -32,6 +29,7 @@ #include "cafPdmFieldCvfColor.h" #include "cafPdmChildField.h" #include "cafPdmFieldCvfVec3d.h" +#include "cafPdmObject.h" #include "cvfObject.h" #include "cvfVector3.h" @@ -40,13 +38,13 @@ class QString; class RimGridView; - +class RimReachCircleLineAppearance; //================================================================================================== /// /// //================================================================================================== -class RimReachCircleAnnotation : public RimLineBasedAnnotation +class RimReachCircleAnnotation : public caf::PdmObject { friend class RimReachCircleAnnotationInView; @@ -58,17 +56,25 @@ public: RimReachCircleAnnotation(); ~RimReachCircleAnnotation() override {} + bool isActive(); + bool isVisible(); + Vec3d centerPoint() const; double radius() const; QString name() const; + RimReachCircleLineAppearance* appearance() 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* userDescriptionField() override; + virtual caf::PdmFieldHandle* objectToggleField() override; private: + caf::PdmField m_isActive; + caf::PdmField m_centerPointXyd; caf::PdmField m_radius; caf::PdmField m_name; + caf::PdmChildField m_appearance; }; diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimReachCircleAnnotationInView.h b/ApplicationCode/ProjectDataModel/Annotations/RimReachCircleAnnotationInView.h index 806e38a234..ae25dcbdb5 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimReachCircleAnnotationInView.h +++ b/ApplicationCode/ProjectDataModel/Annotations/RimReachCircleAnnotationInView.h @@ -19,7 +19,6 @@ #pragma once #include "RimAnnotationLineAppearance.h" -#include "RimLineBasedAnnotation.h" #include "cafPdmChildArrayField.h" #include "cafPdmField.h" diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimUserDefinedPolylinesAnnotation.cpp b/ApplicationCode/ProjectDataModel/Annotations/RimUserDefinedPolylinesAnnotation.cpp index e1f81da0f0..4fd12d4fb8 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimUserDefinedPolylinesAnnotation.cpp +++ b/ApplicationCode/ProjectDataModel/Annotations/RimUserDefinedPolylinesAnnotation.cpp @@ -230,7 +230,10 @@ void RimUserDefinedPolylinesAnnotation::defineUiOrdering(QString uiConfigName, c uiOrdering.add(&m_enablePicking); uiOrdering.add(&m_closePolyline); - auto appearanceGroup = uiOrdering.addNewGroup("Line Appearance"); + uiOrdering.add(&m_showLines); + uiOrdering.add(&m_showSpheres); + + auto appearanceGroup = uiOrdering.addNewGroup("Appearance"); appearance()->uiOrdering(uiConfigName, *appearanceGroup); uiOrdering.skipRemainingFields(true);