#872 - Exporting data from summary plot

This commit is contained in:
astridkbjorke 2017-03-08 12:25:32 +01:00
parent b888e933b5
commit dd3b6101a2
7 changed files with 119 additions and 46 deletions

View File

@ -19,31 +19,24 @@
#include "RicAsciiExportSummaryPlotFeature.h" #include "RicAsciiExportSummaryPlotFeature.h"
#include "RiaApplication.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 "RimSummaryPlot.h"
#include "RimSummaryPlotExportSettings.h" #include "RimSummaryPlotExportSettings.h"
#include "RimSummaryPlotCollection.h"
#include "RiuMainPlotWindow.h" #include "RiuMainWindow.h"
#include "cafPdmUiPropertyViewDialog.h"
#include "cafProgressInfo.h"
#include "cafSelectionManager.h" #include "cafSelectionManager.h"
#include "cvfAssert.h"
#include <QAction> #include <QAction>
#include <QDebug>
#include "cvfAssert.h" #include <QFileInfo>
#include <QMessageBox>
#include <vector> #include <vector>
#include "cafPdmUiPropertyViewDialog.h"
#include "RiuMainWindow.h"
#include "QMessageBox"
#include "QFileInfo"
#include "QDebug"
#include "RiaLogging.h"
#include "cafProgressInfo.h"
CAF_CMD_SOURCE_INIT(RicAsciiExportSummaryPlotFeature, "RicAsciiExportSummaryPlotFeature"); CAF_CMD_SOURCE_INIT(RicAsciiExportSummaryPlotFeature, "RicAsciiExportSummaryPlotFeature");
@ -67,15 +60,13 @@ void RicAsciiExportSummaryPlotFeature::onActionTriggered(bool isChecked)
std::vector<RimSummaryPlot*> selectedSummaryPlots; std::vector<RimSummaryPlot*> selectedSummaryPlots;
caf::SelectionManager::instance()->objectsByType(&selectedSummaryPlots); caf::SelectionManager::instance()->objectsByType(&selectedSummaryPlots);
RimSummaryPlotExportSettings exportSettings; RimSummaryPlotExportSettings exportSettings;
RiaApplication* app = RiaApplication::instance(); RiaApplication* app = RiaApplication::instance();
QString projectFolder = app->currentProjectPath(); QString projectFolder = app->currentProjectPath();
QString defaultDir = RiaApplication::instance()->lastUsedDialogDirectoryWithFallback("SUMMARYPLOT_ASCIIEXPORT_DIR", projectFolder); 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; QString outputFileName = defaultDir + "/" + defaultFilename;
exportSettings.fileName = outputFileName; exportSettings.fileName = outputFileName;
@ -100,7 +91,6 @@ void RicAsciiExportSummaryPlotFeature::onActionTriggered(bool isChecked)
void RicAsciiExportSummaryPlotFeature::setupActionLook(QAction* actionToSetup) void RicAsciiExportSummaryPlotFeature::setupActionLook(QAction* actionToSetup)
{ {
actionToSetup->setText("Export Summary Plot Data"); actionToSetup->setText("Export Summary Plot Data");
actionToSetup->setIcon(QIcon(":/SummaryPlot16x16.png"));
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
@ -120,18 +110,16 @@ bool RicAsciiExportSummaryPlotFeature::writeAsciiExportForSummaryPlots(const QSt
size_t progress = 0; size_t progress = 0;
QTextStream out(&file); QTextStream out(&file);
out << "\n"; for (RimSummaryPlot* summaryPlot : selectedSummaryPlots)
out << "-- Exported from ResInsight" << "\n";
for (auto* summaryPlot : selectedSummaryPlots)
{ {
out << summaryPlot->description();
out << summaryPlot->asciiDataForPlotExport();
progress++; progress++;
pi.setProgress(progress); pi.setProgress(progress);
} }
out << "\n"; out << "\n";
RiaLogging::info(QString("Competed writing ascii values for summary plot(s) to file %1").arg(fileName));
RiaLogging::info(QString("Competed writing COMPDAT data to file %1").arg(fileName));
return true; return true;
} }

View File

@ -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 // ResInsight is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by // it under the terms of the GNU General Public License as published by
@ -22,7 +22,6 @@
#include "cafPdmField.h" #include "cafPdmField.h"
class RimSummaryPlot; class RimSummaryPlot;
// class RimSummaryPlotCollection;
//================================================================================================== //==================================================================================================
/// ///
@ -32,13 +31,11 @@ class RicAsciiExportSummaryPlotFeature : public caf::CmdFeature
CAF_CMD_HEADER_INIT; CAF_CMD_HEADER_INIT;
public: public:
// static void createNewSummaryPlot(RimSummaryPlotCollection* summaryPlotColl, RimSummaryCase* summaryCase);
protected: protected:
// Overrides virtual bool isCommandEnabled() override;
virtual bool isCommandEnabled(); virtual void onActionTriggered( bool isChecked ) override;
virtual void onActionTriggered( bool isChecked ); virtual void setupActionLook(QAction* actionToSetup) override;
virtual void setupActionLook(QAction* actionToSetup);
private: private:
bool writeAsciiExportForSummaryPlots(const QString& fileName, const std::vector<RimSummaryPlot*>& selectedSummaryPlots); bool writeAsciiExportForSummaryPlots(const QString& fileName, const std::vector<RimSummaryPlot*>& selectedSummaryPlots);

View File

@ -79,8 +79,6 @@ public:
void updateCurveVisibility(); void updateCurveVisibility();
//TODO: virtual function for getting plot data for export(?)
protected: protected:
virtual QString createCurveAutoName() = 0; virtual QString createCurveAutoName() = 0;

View File

@ -20,6 +20,7 @@
#include "RiaApplication.h" #include "RiaApplication.h"
#include "RimSummaryCase.h"
#include "RimSummaryCurve.h" #include "RimSummaryCurve.h"
#include "RimSummaryCurveFilter.h" #include "RimSummaryCurveFilter.h"
#include "RimSummaryCurvesCalculator.h" #include "RimSummaryCurvesCalculator.h"
@ -36,6 +37,7 @@
#include "cafPdmUiTreeOrdering.h" #include "cafPdmUiTreeOrdering.h"
#include <QDateTime> #include <QDateTime>
#include <QString>
#include <QRectF> #include <QRectF>
#include "qwt_plot_curve.h" #include "qwt_plot_curve.h"
@ -200,6 +202,98 @@ QWidget* RimSummaryPlot::viewWidget()
return m_qwtPlot; return m_qwtPlot;
} }
//--------------------------------------------------------------------------------------------------
///
//--------------------------------------------------------------------------------------------------
QString RimSummaryPlot::asciiDataForPlotExport()
{
QString out;
std::vector<RimSummaryCurve*> curves;
this->descendantsIncludingThisOfType(curves);
std::vector<QString> caseNames;
std::vector<std::vector<time_t> > timeSteps;
std::vector<std::vector<std::vector<double> > > allCurveData;
std::vector<std::vector<QString > > 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<time_t> curveTimeSteps = curve->timeSteps();
timeSteps.push_back(curveTimeSteps);
std::vector<std::vector<double> > curveDataForCase;
std::vector<double> curveYData = curve->yValues();
curveDataForCase.push_back(curveYData);
allCurveData.push_back(curveDataForCase);
std::vector<QString> curveNamesForCase;
curveNamesForCase.push_back(curve->curveName());
allCurveNames.push_back(curveNamesForCase);
}
else
{
std::vector<double> 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<QString> caseNames)
{
if (caseNames.size() < 1) return -1;
for (int i = 0; i < caseNames.size(); i++)
{
if (curveCase == caseNames[i]) return i;
}
return -1;
}
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------
/// ///
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -87,6 +87,8 @@ public:
virtual QWidget* viewWidget() override; virtual QWidget* viewWidget() override;
QString asciiDataForPlotExport();
protected: protected:
// Overridden PDM methods // Overridden PDM methods
virtual caf::PdmFieldHandle* userDescriptionField() { return &m_userName; } virtual caf::PdmFieldHandle* userDescriptionField() { return &m_userName; }
@ -110,6 +112,8 @@ private:
void updateMdiWindowTitle() override; void updateMdiWindowTitle() override;
virtual void deleteViewWidget() override; virtual void deleteViewWidget() override;
int casePositionInList(QString curveCase, std::vector<QString> caseNames);
private: private:
caf::PdmField<bool> m_showPlotTitle; caf::PdmField<bool> m_showPlotTitle;
caf::PdmField<QString> m_userName; caf::PdmField<QString> m_userName;

View File

@ -20,9 +20,6 @@
#include "cafPdmUiFilePathEditor.h" #include "cafPdmUiFilePathEditor.h"
#include "cafPdmPtrField.h" #include "cafPdmPtrField.h"
// #include "RimEclipseCase.h"
// #include "RimTools.h"
CAF_PDM_SOURCE_INIT(RimSummaryPlotExportSettings, "RimSummaryPlotExportSettings"); CAF_PDM_SOURCE_INIT(RimSummaryPlotExportSettings, "RimSummaryPlotExportSettings");
@ -36,8 +33,6 @@ RimSummaryPlotExportSettings::RimSummaryPlotExportSettings()
CAF_PDM_InitFieldNoDefault(&fileName, "Filename", "Export filename", "", "", ""); CAF_PDM_InitFieldNoDefault(&fileName, "Filename", "Export filename", "", "", "");
fileName.uiCapability()->setUiEditorTypeName(caf::PdmUiFilePathEditor::uiEditorTypeName()); fileName.uiCapability()->setUiEditorTypeName(caf::PdmUiFilePathEditor::uiEditorTypeName());
// CAF_PDM_InitFieldNoDefault(&caseToApply, "CaseToApply", "Case to apply", "", "", "");
} }
//-------------------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------------------

View File

@ -19,12 +19,9 @@
#pragma once #pragma once
#include "cafPdmField.h" #include "cafPdmField.h"
#include "cafPdmFieldHandle.h"
#include "cafPdmObject.h" #include "cafPdmObject.h"
#include "cafPdmPtrField.h" #include "cafPdmUiFieldEditorHandle.h"
#include "cafPdmUiItem.h"
class RimEclipseCase;
//================================================================================================== //==================================================================================================
/// ///