diff --git a/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.cpp b/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.cpp index c387965090..384509e414 100644 --- a/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.cpp +++ b/ApplicationCode/ModelVisualization/RivPolylineAnnotationPartMgr.cpp @@ -79,7 +79,7 @@ void RivPolylineAnnotationPartMgr::buildPolylineAnnotationParts(const caf::Displ auto linesInDomain = getPolylinesPointsInDomain(collection->snapAnnotations(), collection->annotationPlaneZ()); auto linesInDisplay = transformPolylinesPointsToDisplay(linesInDomain, displayXf); - cvf::ref drawableGeo = RivPolylineGenerator::createLineAlongPolylineDrawable(linesInDisplay); + cvf::ref drawableGeo = RivPolylineGenerator::createLineAlongPolylineDrawable(linesInDisplay, rimAnnotation->closePolyline()); cvf::ref part = new cvf::Part; part->setName("RivPolylineAnnotationPartMgr"); part->setDrawable(drawableGeo.p()); diff --git a/ApplicationCode/ModelVisualization/RivPolylineGenerator.cpp b/ApplicationCode/ModelVisualization/RivPolylineGenerator.cpp index 5723d5eef5..d75436b34d 100644 --- a/ApplicationCode/ModelVisualization/RivPolylineGenerator.cpp +++ b/ApplicationCode/ModelVisualization/RivPolylineGenerator.cpp @@ -26,18 +26,18 @@ //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- -cvf::ref RivPolylineGenerator::createLineAlongPolylineDrawable(const std::vector& polyLine) +cvf::ref RivPolylineGenerator::createLineAlongPolylineDrawable(const std::vector& polyLine, bool closeLine) { std::vector> polyLines; polyLines.push_back(polyLine); - return createLineAlongPolylineDrawable(polyLines); + return createLineAlongPolylineDrawable(polyLines, closeLine); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- cvf::ref - RivPolylineGenerator::createLineAlongPolylineDrawable(const std::vector>& polyLines) + RivPolylineGenerator::createLineAlongPolylineDrawable(const std::vector>& polyLines, bool closeLine) { std::vector lineIndices; std::vector vertices; @@ -57,6 +57,12 @@ cvf::ref lineIndices.push_back(static_cast(verticesCount + i + 1)); } } + + if (closeLine && vertices.front() != vertices.back()) + { + lineIndices.push_back(static_cast(verticesCount + polyLine.size() - 1)); + lineIndices.push_back(static_cast(verticesCount)); + } } if (vertices.empty()) return nullptr; diff --git a/ApplicationCode/ModelVisualization/RivPolylineGenerator.h b/ApplicationCode/ModelVisualization/RivPolylineGenerator.h index e57395f21b..4f33c395c1 100644 --- a/ApplicationCode/ModelVisualization/RivPolylineGenerator.h +++ b/ApplicationCode/ModelVisualization/RivPolylineGenerator.h @@ -35,8 +35,8 @@ namespace cvf class RivPolylineGenerator : public cvf::Object { public: - static cvf::ref createLineAlongPolylineDrawable(const std::vector& polyLine); - static cvf::ref createLineAlongPolylineDrawable(const std::vector>& polyLines); + static cvf::ref createLineAlongPolylineDrawable(const std::vector& polyLine, bool closeLine = false); + static cvf::ref createLineAlongPolylineDrawable(const std::vector>& polyLines, bool closeLine = false); static cvf::ref createPointsFromPolylineDrawable(const std::vector& polyLine); static cvf::ref createPointsFromPolylineDrawable(const std::vector>& polyLines); diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesAnnotation.cpp b/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesAnnotation.cpp index 825813f294..aa26ca3bb4 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesAnnotation.cpp +++ b/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesAnnotation.cpp @@ -35,6 +35,7 @@ RimPolylinesAnnotation::RimPolylinesAnnotation() { CAF_PDM_InitObject("PolylineAnnotation", ":/WellCollection.png", "", ""); + CAF_PDM_InitField(&m_closePolyline, "ClosePolyline", false, "Close Polyline", "", "", ""); } //-------------------------------------------------------------------------------------------------- @@ -45,3 +46,11 @@ RimPolylinesAnnotation::~RimPolylinesAnnotation() } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RimPolylinesAnnotation::closePolyline() const +{ + return m_closePolyline; +} + diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesAnnotation.h b/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesAnnotation.h index 29ef91d01c..74f062c131 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesAnnotation.h +++ b/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesAnnotation.h @@ -41,4 +41,9 @@ public: virtual cvf::ref polyLinesData() = 0; virtual bool isEmpty() = 0; + + bool closePolyline() const; + +protected: + caf::PdmField m_closePolyline; }; diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesFromFileAnnotation.cpp b/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesFromFileAnnotation.cpp index a542a380e9..f3fc58c6f0 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesFromFileAnnotation.cpp +++ b/ApplicationCode/ProjectDataModel/Annotations/RimPolylinesFromFileAnnotation.cpp @@ -178,6 +178,8 @@ void RimPolylinesFromFileAnnotation::setDescriptionFromFileName() void RimPolylinesFromFileAnnotation::defineUiOrdering(QString uiConfigName, caf::PdmUiOrdering& uiOrdering) { uiOrdering.add(&m_polyLinesFileName); + uiOrdering.add(&m_closePolyline); + auto appearanceGroup = uiOrdering.addNewGroup("Line Appearance"); appearance()->uiOrdering(uiConfigName, *appearanceGroup); diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimReachCircleAnnotation.h b/ApplicationCode/ProjectDataModel/Annotations/RimReachCircleAnnotation.h index c8bd4cec7a..1d2b5da384 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimReachCircleAnnotation.h +++ b/ApplicationCode/ProjectDataModel/Annotations/RimReachCircleAnnotation.h @@ -56,6 +56,7 @@ class RimReachCircleAnnotation : public RimLineBasedAnnotation public: RimReachCircleAnnotation(); + ~RimReachCircleAnnotation() override {} Vec3d centerPoint() const; double radius() const; diff --git a/ApplicationCode/ProjectDataModel/Annotations/RimUserDefinedPolylinesAnnotation.cpp b/ApplicationCode/ProjectDataModel/Annotations/RimUserDefinedPolylinesAnnotation.cpp index 35e95bd434..e1f81da0f0 100644 --- a/ApplicationCode/ProjectDataModel/Annotations/RimUserDefinedPolylinesAnnotation.cpp +++ b/ApplicationCode/ProjectDataModel/Annotations/RimUserDefinedPolylinesAnnotation.cpp @@ -228,6 +228,7 @@ void RimUserDefinedPolylinesAnnotation::defineUiOrdering(QString uiConfigName, c uiOrdering.add(&m_name); uiOrdering.add(&m_targets); uiOrdering.add(&m_enablePicking); + uiOrdering.add(&m_closePolyline); auto appearanceGroup = uiOrdering.addNewGroup("Line Appearance"); appearance()->uiOrdering(uiConfigName, *appearanceGroup);