diff --git a/ApplicationCode/Commands/SummaryPlotCommands/RicAsciiExportSummaryPlotFeature.cpp b/ApplicationCode/Commands/SummaryPlotCommands/RicAsciiExportSummaryPlotFeature.cpp index 28d7c83112..fc63f9a89f 100644 --- a/ApplicationCode/Commands/SummaryPlotCommands/RicAsciiExportSummaryPlotFeature.cpp +++ b/ApplicationCode/Commands/SummaryPlotCommands/RicAsciiExportSummaryPlotFeature.cpp @@ -19,31 +19,24 @@ #include "RicAsciiExportSummaryPlotFeature.h" #include "RiaApplication.h" -#include "RiaPreferences.h" +#include "RiaLogging.h" -#include "RimMainPlotCollection.h" -#include "RimProject.h" -#include "RimSummaryCase.h" -#include "RimSummaryCurveFilter.h" #include "RimSummaryPlot.h" #include "RimSummaryPlotExportSettings.h" -#include "RimSummaryPlotCollection.h" -#include "RiuMainPlotWindow.h" +#include "RiuMainWindow.h" +#include "cafPdmUiPropertyViewDialog.h" +#include "cafProgressInfo.h" #include "cafSelectionManager.h" +#include "cvfAssert.h" #include - -#include "cvfAssert.h" +#include +#include +#include #include -#include "cafPdmUiPropertyViewDialog.h" -#include "RiuMainWindow.h" -#include "QMessageBox" -#include "QFileInfo" -#include "QDebug" -#include "RiaLogging.h" -#include "cafProgressInfo.h" + CAF_CMD_SOURCE_INIT(RicAsciiExportSummaryPlotFeature, "RicAsciiExportSummaryPlotFeature"); @@ -67,15 +60,13 @@ void RicAsciiExportSummaryPlotFeature::onActionTriggered(bool isChecked) std::vector selectedSummaryPlots; caf::SelectionManager::instance()->objectsByType(&selectedSummaryPlots); - - RimSummaryPlotExportSettings exportSettings; RiaApplication* app = RiaApplication::instance(); QString projectFolder = app->currentProjectPath(); QString defaultDir = RiaApplication::instance()->lastUsedDialogDirectoryWithFallback("SUMMARYPLOT_ASCIIEXPORT_DIR", projectFolder); - QString defaultFilename = QString("SummaryPlotExport"); //TODO - take from summery plot user name + QString defaultFilename = QString("SummaryPlotExport"); QString outputFileName = defaultDir + "/" + defaultFilename; exportSettings.fileName = outputFileName; @@ -100,7 +91,6 @@ void RicAsciiExportSummaryPlotFeature::onActionTriggered(bool isChecked) void RicAsciiExportSummaryPlotFeature::setupActionLook(QAction* actionToSetup) { actionToSetup->setText("Export Summary Plot Data"); - actionToSetup->setIcon(QIcon(":/SummaryPlot16x16.png")); } //-------------------------------------------------------------------------------------------------- @@ -120,18 +110,16 @@ bool RicAsciiExportSummaryPlotFeature::writeAsciiExportForSummaryPlots(const QSt size_t progress = 0; QTextStream out(&file); - out << "\n"; - out << "-- Exported from ResInsight" << "\n"; - - for (auto* summaryPlot : selectedSummaryPlots) + for (RimSummaryPlot* summaryPlot : selectedSummaryPlots) { + out << summaryPlot->description(); + out << summaryPlot->asciiDataForPlotExport(); + progress++; pi.setProgress(progress); } - out << "\n"; - - RiaLogging::info(QString("Competed writing COMPDAT data to file %1").arg(fileName)); + RiaLogging::info(QString("Competed writing ascii values for summary plot(s) to file %1").arg(fileName)); return true; } diff --git a/ApplicationCode/Commands/SummaryPlotCommands/RicAsciiExportSummaryPlotFeature.h b/ApplicationCode/Commands/SummaryPlotCommands/RicAsciiExportSummaryPlotFeature.h index ee35e6aeb0..2ae3ece81c 100644 --- a/ApplicationCode/Commands/SummaryPlotCommands/RicAsciiExportSummaryPlotFeature.h +++ b/ApplicationCode/Commands/SummaryPlotCommands/RicAsciiExportSummaryPlotFeature.h @@ -1,6 +1,6 @@ ///////////////////////////////////////////////////////////////////////////////// // -// Copyright (C) 2016- Statoil ASA +// Copyright (C) 2017- 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 @@ -22,7 +22,6 @@ #include "cafPdmField.h" class RimSummaryPlot; -// class RimSummaryPlotCollection; //================================================================================================== /// @@ -32,13 +31,11 @@ class RicAsciiExportSummaryPlotFeature : public caf::CmdFeature CAF_CMD_HEADER_INIT; public: -// static void createNewSummaryPlot(RimSummaryPlotCollection* summaryPlotColl, RimSummaryCase* summaryCase); protected: - // Overrides - virtual bool isCommandEnabled(); - virtual void onActionTriggered( bool isChecked ); - virtual void setupActionLook(QAction* actionToSetup); + virtual bool isCommandEnabled() override; + virtual void onActionTriggered( bool isChecked ) override; + virtual void setupActionLook(QAction* actionToSetup) override; private: bool writeAsciiExportForSummaryPlots(const QString& fileName, const std::vector& selectedSummaryPlots); diff --git a/ApplicationCode/ProjectDataModel/RimPlotCurve.h b/ApplicationCode/ProjectDataModel/RimPlotCurve.h index fa9d1a9ed2..775f076cb4 100644 --- a/ApplicationCode/ProjectDataModel/RimPlotCurve.h +++ b/ApplicationCode/ProjectDataModel/RimPlotCurve.h @@ -79,8 +79,6 @@ public: void updateCurveVisibility(); - //TODO: virtual function for getting plot data for export(?) - protected: virtual QString createCurveAutoName() = 0; diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp index dca6c0301a..760334e613 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.cpp @@ -20,6 +20,7 @@ #include "RiaApplication.h" +#include "RimSummaryCase.h" #include "RimSummaryCurve.h" #include "RimSummaryCurveFilter.h" #include "RimSummaryCurvesCalculator.h" @@ -36,6 +37,7 @@ #include "cafPdmUiTreeOrdering.h" #include +#include #include #include "qwt_plot_curve.h" @@ -200,6 +202,98 @@ QWidget* RimSummaryPlot::viewWidget() return m_qwtPlot; } +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +QString RimSummaryPlot::asciiDataForPlotExport() +{ + QString out; + + std::vector curves; + this->descendantsIncludingThisOfType(curves); + + std::vector caseNames; + std::vector > timeSteps; + + std::vector > > allCurveData; + std::vector > allCurveNames; + //Vectors containing cases - curves - data points/curve name + + for (RimSummaryCurve* curve : curves) + { + if (!curve->isCurveVisible()) continue; + + QString curveCaseName = curve->summaryCase()->caseName(); + int casePosInList = casePositionInList(curveCaseName, caseNames); + if (casePosInList < 0) //case is not yet considered + { + caseNames.push_back(curveCaseName); + + std::vector curveTimeSteps = curve->timeSteps(); + timeSteps.push_back(curveTimeSteps); + + std::vector > curveDataForCase; + std::vector curveYData = curve->yValues(); + curveDataForCase.push_back(curveYData); + allCurveData.push_back(curveDataForCase); + + std::vector curveNamesForCase; + curveNamesForCase.push_back(curve->curveName()); + allCurveNames.push_back(curveNamesForCase); + } + else + { + std::vector curveYData = curve->yValues(); + allCurveData[casePosInList].push_back(curveYData); + + QString curveName = curve->curveName(); + allCurveNames[casePosInList].push_back(curveName); + } + } + + for (int i = 0; i < timeSteps.size(); i++) //cases + { + out += "\n\n"; + out += "Case: " + caseNames[i]; + out += "\n"; + + for (int j = 0; j < timeSteps[i].size(); j++) //time steps & data points + { + if (j == 0) + { + out += "Date and time"; + for (int k = 0; k < allCurveNames[i].size(); k++) // curves + { + out += "\t" + (allCurveNames[i][k]); + } + } + out += "\n"; + out += QDateTime::fromTime_t(timeSteps[i][j]).toUTC().toString("yyyy-MM-dd hh:mm:ss "); + + for (int k = 0; k < allCurveData[i].size(); k++) // curves + { + out += "\t" + QString::number(allCurveData[i][k][j], 'g', 6); + } + } + } + return out; +} + +//-------------------------------------------------------------------------------------------------- +/// +//-------------------------------------------------------------------------------------------------- +int RimSummaryPlot::casePositionInList(QString curveCase, std::vector caseNames) +{ + if (caseNames.size() < 1) return -1; + + for (int i = 0; i < caseNames.size(); i++) + { + if (curveCase == caseNames[i]) return i; + } + + return -1; +} + //-------------------------------------------------------------------------------------------------- /// //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.h index 47585d337f..a500d8622b 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlot.h @@ -87,6 +87,8 @@ public: virtual QWidget* viewWidget() override; + QString asciiDataForPlotExport(); + protected: // Overridden PDM methods virtual caf::PdmFieldHandle* userDescriptionField() { return &m_userName; } @@ -110,6 +112,8 @@ private: void updateMdiWindowTitle() override; virtual void deleteViewWidget() override; + int casePositionInList(QString curveCase, std::vector caseNames); + private: caf::PdmField m_showPlotTitle; caf::PdmField m_userName; diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotExportSettings.cpp b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotExportSettings.cpp index 07a469678b..d2853876d8 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotExportSettings.cpp +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotExportSettings.cpp @@ -20,9 +20,6 @@ #include "cafPdmUiFilePathEditor.h" #include "cafPdmPtrField.h" -// #include "RimEclipseCase.h" -// #include "RimTools.h" - CAF_PDM_SOURCE_INIT(RimSummaryPlotExportSettings, "RimSummaryPlotExportSettings"); @@ -36,8 +33,6 @@ RimSummaryPlotExportSettings::RimSummaryPlotExportSettings() CAF_PDM_InitFieldNoDefault(&fileName, "Filename", "Export filename", "", "", ""); fileName.uiCapability()->setUiEditorTypeName(caf::PdmUiFilePathEditor::uiEditorTypeName()); -// CAF_PDM_InitFieldNoDefault(&caseToApply, "CaseToApply", "Case to apply", "", "", ""); - } //-------------------------------------------------------------------------------------------------- diff --git a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotExportSettings.h b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotExportSettings.h index ee151b4827..87be4643db 100644 --- a/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotExportSettings.h +++ b/ApplicationCode/ProjectDataModel/Summary/RimSummaryPlotExportSettings.h @@ -19,12 +19,9 @@ #pragma once #include "cafPdmField.h" +#include "cafPdmFieldHandle.h" #include "cafPdmObject.h" -#include "cafPdmPtrField.h" -#include "cafPdmUiItem.h" - - -class RimEclipseCase; +#include "cafPdmUiFieldEditorHandle.h" //================================================================================================== ///