From 763d25040e6636a44f74078b98cd9eb362abd1de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Jensen?= Date: Tue, 8 May 2018 10:17:05 +0200 Subject: [PATCH] #2840 Ensemble curve. Copy/paste og curve sets --- .../RicCopyReferencesToClipboardFeature.cpp | 5 + .../CMakeLists_files.cmake | 2 + .../RicPasteEnsembleCurveSetFeature.cpp | 128 ++++++++++++++++++ .../RicPasteEnsembleCurveSetFeature.h | 45 ++++++ .../RimContextCommandBuilder.cpp | 2 + .../Summary/RimEnsembleCurveSet.cpp | 33 +---- 6 files changed, 185 insertions(+), 30 deletions(-) create mode 100644 ApplicationCode/Commands/SummaryPlotCommands/RicPasteEnsembleCurveSetFeature.cpp create mode 100644 ApplicationCode/Commands/SummaryPlotCommands/RicPasteEnsembleCurveSetFeature.h diff --git a/ApplicationCode/Commands/OperationsUsingObjReferences/RicCopyReferencesToClipboardFeature.cpp b/ApplicationCode/Commands/OperationsUsingObjReferences/RicCopyReferencesToClipboardFeature.cpp index c5c5d7eb6d..a09af8470a 100644 --- a/ApplicationCode/Commands/OperationsUsingObjReferences/RicCopyReferencesToClipboardFeature.cpp +++ b/ApplicationCode/Commands/OperationsUsingObjReferences/RicCopyReferencesToClipboardFeature.cpp @@ -21,6 +21,7 @@ #include "RimEclipseCase.h" #include "RimEclipseView.h" +#include "RimEnsembleCurveSet.h" #include "RimFractureTemplate.h" #include "RimGeoMechView.h" #include "RimIntersection.h" @@ -167,6 +168,10 @@ bool RicCopyReferencesToClipboardFeature::isCopyOfObjectSupported(caf::PdmObject { return true; } + else if (dynamic_cast(pdmObject)) + { + return true; + } return false; } diff --git a/ApplicationCode/Commands/SummaryPlotCommands/CMakeLists_files.cmake b/ApplicationCode/Commands/SummaryPlotCommands/CMakeLists_files.cmake index 2976bac7f4..ff9d3e59fc 100644 --- a/ApplicationCode/Commands/SummaryPlotCommands/CMakeLists_files.cmake +++ b/ApplicationCode/Commands/SummaryPlotCommands/CMakeLists_files.cmake @@ -33,6 +33,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RicSummaryCurveCalculatorEditor.h ${CMAKE_CURRENT_LIST_DIR}/RicSummaryCurveCalculator.h ${CMAKE_CURRENT_LIST_DIR}/RicNewSummaryCrossPlotCurveFeature.h ${CMAKE_CURRENT_LIST_DIR}/RicNewSummaryEnsembleCurveSetFeature.h +${CMAKE_CURRENT_LIST_DIR}/RicPasteEnsembleCurveSetFeature.h ) set (SOURCE_GROUP_SOURCE_FILES @@ -69,6 +70,7 @@ ${CMAKE_CURRENT_LIST_DIR}/RicSummaryCurveCalculatorEditor.cpp ${CMAKE_CURRENT_LIST_DIR}/RicSummaryCurveCalculator.cpp ${CMAKE_CURRENT_LIST_DIR}/RicNewSummaryCrossPlotCurveFeature.cpp ${CMAKE_CURRENT_LIST_DIR}/RicNewSummaryEnsembleCurveSetFeature.cpp +${CMAKE_CURRENT_LIST_DIR}/RicPasteEnsembleCurveSetFeature.cpp ) list(APPEND CODE_HEADER_FILES diff --git a/ApplicationCode/Commands/SummaryPlotCommands/RicPasteEnsembleCurveSetFeature.cpp b/ApplicationCode/Commands/SummaryPlotCommands/RicPasteEnsembleCurveSetFeature.cpp new file mode 100644 index 0000000000..e843b81d7d --- /dev/null +++ b/ApplicationCode/Commands/SummaryPlotCommands/RicPasteEnsembleCurveSetFeature.cpp @@ -0,0 +1,128 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2016- Statoil 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 "RicPasteEnsembleCurveSetFeature.h" + +#include "RiaSummaryTools.h" + +#include "OperationsUsingObjReferences/RicPasteFeatureImpl.h" + +#include "RimEnsembleCurveSet.h" +#include "RimEnsembleCurveSetCollection.h" +//#include "RimSummaryCurve.h" +//#include "RimSummaryCurveFilter.h" +#include "RimSummaryPlot.h" +//#include "RimSummaryCrossPlot.h" + +#include "cafPdmDefaultObjectFactory.h" +#include "cafPdmDocument.h" +#include "cafPdmObjectGroup.h" +#include "cafSelectionManagerTools.h" + +#include "cvfAssert.h" + +#include + + +CAF_CMD_SOURCE_INIT(RicPasteEnsembleCurveSetFeature, "RicPasteEnsembleCurveSetFeature"); + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +RimEnsembleCurveSet* RicPasteEnsembleCurveSetFeature::copyCurveSetAndAddToCollection(RimEnsembleCurveSet *sourceCurveSet) +{ + RimSummaryPlot* plot = caf::firstAncestorOfTypeFromSelectedObject(); + RimEnsembleCurveSetCollection* coll = caf::firstAncestorOfTypeFromSelectedObject(); + + RimEnsembleCurveSet* newCurveSet = dynamic_cast(sourceCurveSet->xmlCapability()->copyByXmlSerialization(caf::PdmDefaultObjectFactory::instance())); + CVF_ASSERT(newCurveSet); + + if (!coll) coll = plot->ensembleCurveSets(); + + coll->addCurveSet(newCurveSet); + + // Resolve references after object has been inserted into the project data model + newCurveSet->resolveReferencesRecursively(); + newCurveSet->initAfterReadRecursively(); + newCurveSet->loadDataAndUpdate(true); + newCurveSet->updateConnectedEditors(); + + coll->updateConnectedEditors(); + + return newCurveSet; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +bool RicPasteEnsembleCurveSetFeature::isCommandEnabled() +{ + caf::PdmObject* destinationObject = dynamic_cast(caf::SelectionManager::instance()->selectedItem()); + + RimSummaryPlot* plot; + RimEnsembleCurveSetCollection* coll = nullptr; + destinationObject->firstAncestorOrThisOfType(plot); + destinationObject->firstAncestorOrThisOfType(coll); + if(!coll && !plot) + { + return false; + } + + if (ensembleCurveSetsOnClipboard().size() == 0) + { + return false; + } + return true; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicPasteEnsembleCurveSetFeature::onActionTriggered(bool isChecked) +{ + std::vector > sourceObjects = RicPasteEnsembleCurveSetFeature::ensembleCurveSetsOnClipboard(); + + for (size_t i = 0; i < sourceObjects.size(); i++) + { + copyCurveSetAndAddToCollection(sourceObjects[i]); + } +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +void RicPasteEnsembleCurveSetFeature::setupActionLook(QAction* actionToSetup) +{ + actionToSetup->setText("Paste Ensemble Curve Set"); + + RicPasteFeatureImpl::setIconAndShortcuts(actionToSetup); +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +std::vector > RicPasteEnsembleCurveSetFeature::ensembleCurveSetsOnClipboard() +{ + caf::PdmObjectGroup objectGroup; + RicPasteFeatureImpl::findObjectsFromClipboardRefs(&objectGroup); + + std::vector > typedObjects; + objectGroup.objectsByType(&typedObjects); + + return typedObjects; +} diff --git a/ApplicationCode/Commands/SummaryPlotCommands/RicPasteEnsembleCurveSetFeature.h b/ApplicationCode/Commands/SummaryPlotCommands/RicPasteEnsembleCurveSetFeature.h new file mode 100644 index 0000000000..c4511b0cc4 --- /dev/null +++ b/ApplicationCode/Commands/SummaryPlotCommands/RicPasteEnsembleCurveSetFeature.h @@ -0,0 +1,45 @@ +///////////////////////////////////////////////////////////////////////////////// +// +// Copyright (C) 2016- Statoil 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 "cafCmdFeature.h" +#include "cafPdmPointer.h" + +#include + +class RimEnsembleCurveSet; + +//================================================================================================== +/// +//================================================================================================== +class RicPasteEnsembleCurveSetFeature : public caf::CmdFeature +{ + CAF_CMD_HEADER_INIT; + +public: + static RimEnsembleCurveSet* copyCurveSetAndAddToCollection(RimEnsembleCurveSet *sourceCurveSet); + +protected: + // Overrides + virtual bool isCommandEnabled() override; + virtual void onActionTriggered( bool isChecked ) override; + virtual void setupActionLook(QAction* actionToSetup) override; + + static std::vector > ensembleCurveSetsOnClipboard(); +}; diff --git a/ApplicationCode/ProjectDataModel/RimContextCommandBuilder.cpp b/ApplicationCode/ProjectDataModel/RimContextCommandBuilder.cpp index ed671389f1..052679e542 100644 --- a/ApplicationCode/ProjectDataModel/RimContextCommandBuilder.cpp +++ b/ApplicationCode/ProjectDataModel/RimContextCommandBuilder.cpp @@ -423,6 +423,7 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection() menuBuilder << "RicPasteSummaryCrossPlotCurveFeature"; menuBuilder << "RicPasteSummaryPlotFeature"; menuBuilder << "RicPasteAsciiDataToSummaryPlotFeature"; + menuBuilder << "RicPasteEnsembleCurveSetFeature"; menuBuilder << "Separator"; menuBuilder << "RicEditSummaryPlotFeature"; menuBuilder << "RicNewSummaryPlotFeature"; @@ -469,6 +470,7 @@ caf::CmdFeatureMenuBuilder RimContextCommandBuilder::commandsFromSelection() else if (dynamic_cast(uiItem)) { menuBuilder << "RicNewSummaryEnsembleCurveSetFeature"; + menuBuilder << "RicPasteEnsembleCurveSetFeature"; } else if (dynamic_cast(uiItem)) { diff --git a/ApplicationCode/ProjectDataModel/Summary/RimEnsembleCurveSet.cpp b/ApplicationCode/ProjectDataModel/Summary/RimEnsembleCurveSet.cpp index f86a69226f..84466010ef 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimEnsembleCurveSet.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimEnsembleCurveSet.cpp @@ -184,36 +184,10 @@ void RimEnsembleCurveSet::setColor(cvf::Color3f color) void RimEnsembleCurveSet::loadDataAndUpdate(bool updateParentPlot) { m_yValuesSelectedVariableDisplayField = QString::fromStdString(m_yValuesCurveVariable->address().uiText()); - - m_yValuesSummaryFilter->updateFromAddress(m_yValuesCurveVariable->address()); - - for (RimSummaryCurve* curve : m_curves) - { - curve->loadDataAndUpdate(false); - - if (curve->qwtPlotCurve()) - { - curve->qwtPlotCurve()->setItemAttribute(QwtPlotItem::Legend, false); - } - - curve->updateQwtPlotAxis(); - } - - if (updateParentPlot) - { - RimSummaryPlot* parentPlot; - firstAncestorOrThisOfTypeAsserted(parentPlot); - if (parentPlot->qwtPlot()) - { - parentPlot->updatePlotTitle(); - parentPlot->qwtPlot()->updateLegend(); - parentPlot->updateAxes(); - parentPlot->updateZoomInQwt(); - } - } + m_yValuesUiFilterResultSelection = m_yValuesCurveVariable->address(); m_legendConfig->initForEnsembleCurveSet(this); - updateCurveColors(); + updateAllCurves(); } //-------------------------------------------------------------------------------------------------- @@ -809,8 +783,6 @@ void RimEnsembleCurveSet::updateAllCurves() deleteAllCurves(); - plot->loadDataAndUpdate(); - RimSummaryCaseCollection* group = m_yValuesSummaryGroup(); RimSummaryAddress* addr = m_yValuesCurveVariable(); if (group && plot && addr->address().category() != RifEclipseSummaryAddress::SUMMARY_INVALID) @@ -831,6 +803,7 @@ void RimEnsembleCurveSet::updateAllCurves() curve->qwtPlotCurve()->setItemAttribute(QwtPlotItem::Legend, false); } } + m_yValuesSummaryFilter->updateFromAddress(addr->address()); RimSummaryPlot* plot; firstAncestorOrThisOfType(plot);