///////////////////////////////////////////////////////////////////////////////// // // 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 "RimAnnotationCollection.h" #include "RiaApplication.h" #include "RiaColorTables.h" #include "RimTextAnnotation.h" #include "RimReachCircleAnnotation.h" #include "RimPolylinesFromFileAnnotation.h" #include "RimUserDefinedPolylinesAnnotation.h" #include "RimProject.h" #include "RimGridView.h" #include "RimAnnotationInViewCollection.h" #include "QMessageBox" #include #include "RiaColorTables.h" CAF_PDM_SOURCE_INIT(RimAnnotationCollection, "RimAnnotationCollection"); //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RimAnnotationCollection::RimAnnotationCollection() { CAF_PDM_InitObject("Annotations", ":/Annotations16x16.png", "", ""); CAF_PDM_InitFieldNoDefault(&m_reachCircleAnnotations, "ReachCircleAnnotations", "Reach Circle Annotations", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_userDefinedPolylineAnnotations, "UserDefinedPolylineAnnotations", "User Defined Polyline Annotations", "", "", ""); CAF_PDM_InitFieldNoDefault(&m_polylineFromFileAnnotations, "PolylineFromFileAnnotations", "Polylines From File", "", "", ""); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RimAnnotationCollection::~RimAnnotationCollection() { } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimAnnotationCollection::addAnnotation(RimReachCircleAnnotation* annotation) { m_reachCircleAnnotations.push_back(annotation); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimAnnotationCollection::addAnnotation(RimUserDefinedPolylinesAnnotation* annotation) { m_userDefinedPolylineAnnotations.push_back(annotation); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimAnnotationCollection::addAnnotation(RimPolylinesFromFileAnnotation* annotation) { m_polylineFromFileAnnotations.push_back(annotation); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- std::vector RimAnnotationCollection::reachCircleAnnotations() const { return m_reachCircleAnnotations.childObjects(); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- std::vector RimAnnotationCollection::userDefinedPolylineAnnotations() const { return m_userDefinedPolylineAnnotations.childObjects(); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- std::vector RimAnnotationCollection::polylinesFromFileAnnotations() const { return m_polylineFromFileAnnotations.childObjects(); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- RimPolylinesFromFileAnnotation* RimAnnotationCollection::importOrUpdatePolylinesFromFile(const QStringList& fileNames) { QStringList newFileNames; std::vector polyLinesObjsToReload; for(const QString& newFileName : fileNames) { bool isFound = false; for(RimPolylinesFromFileAnnotation* polyLinesAnnot: m_polylineFromFileAnnotations) { if(polyLinesAnnot->fileName() == newFileName) { polyLinesObjsToReload.push_back(polyLinesAnnot); isFound = true; break; } } if(!isFound) { newFileNames.push_back(newFileName); } } size_t newLinesIdx = 0; for(const QString& newFileName : newFileNames) { RimPolylinesFromFileAnnotation* newPolyLinesAnnot = new RimPolylinesFromFileAnnotation; auto newColor = RiaColorTables::categoryPaletteColors().cycledColor3f(lineBasedAnnotationsCount()); newPolyLinesAnnot->setFileName(newFileName); newPolyLinesAnnot->setDescriptionFromFileName(); newPolyLinesAnnot->appearance()->setColor(newColor); m_polylineFromFileAnnotations.push_back(newPolyLinesAnnot); polyLinesObjsToReload.push_back(newPolyLinesAnnot); ++newLinesIdx; } reloadPolylinesFromFile(polyLinesObjsToReload); if (!newFileNames.empty()) { return m_polylineFromFileAnnotations.childObjects().back(); } else { return nullptr; } } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- size_t RimAnnotationCollection::lineBasedAnnotationsCount() const { return m_reachCircleAnnotations.size() + m_userDefinedPolylineAnnotations.size() + m_polylineFromFileAnnotations.size(); } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimAnnotationCollection::reloadPolylinesFromFile(const std::vector& polyLinesObjsToReload) { QString totalErrorMessage; for ( RimPolylinesFromFileAnnotation* polyLinesAnnot: polyLinesObjsToReload ) { QString errormessage; polyLinesAnnot->readPolyLinesFile(&errormessage); if ( !errormessage.isEmpty() ) { totalErrorMessage += "\nError in: " + polyLinesAnnot->fileName() + "\n\t" + errormessage; } } if ( !totalErrorMessage.isEmpty() ) { QMessageBox::warning(nullptr, "Import Polylines", totalErrorMessage); } } //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- void RimAnnotationCollection::loadDataAndUpdate() { reloadPolylinesFromFile(m_polylineFromFileAnnotations.childObjects()); }