mirror of
https://github.com/OPM/ResInsight.git
synced 2025-02-25 18:55:39 -06:00
#872 - Exporting data from summary plot
This commit is contained in:
parent
b888e933b5
commit
dd3b6101a2
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
|
@ -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;
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
///
|
///
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -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;
|
||||||
|
@ -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", "", "", "");
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//--------------------------------------------------------------------------------------------------
|
//--------------------------------------------------------------------------------------------------
|
||||||
|
@ -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;
|
|
||||||
|
|
||||||
//==================================================================================================
|
//==================================================================================================
|
||||||
///
|
///
|
||||||
|
Loading…
Reference in New Issue
Block a user