mirror of
https://github.com/arcan1s/moldyn.git
synced 2025-06-29 15:15:47 +00:00
160 lines
4.5 KiB
C++
160 lines
4.5 KiB
C++
#include <QDir>
|
|
#include <QFileDialog>
|
|
#include <QKeyEvent>
|
|
#include <QTextStream>
|
|
|
|
#include <qwt/qwt_plot.h>
|
|
#include <qwt/qwt_plot_curve.h>
|
|
#include <qwt/qwt_series_data.h>
|
|
|
|
#include "statgengraphwindow.h"
|
|
#include "ui_statgengraphwindow.h"
|
|
|
|
StatgenGraphWindow::StatgenGraphWindow(QWidget *parent, QString inputfile) :
|
|
QMainWindow(parent),
|
|
ui(new Ui::StatgenGraphWindow)
|
|
{
|
|
ui->setupUi(this);
|
|
|
|
_inputfile = inputfile;
|
|
|
|
readData();
|
|
paintGraph();
|
|
}
|
|
|
|
StatgenGraphWindow::~StatgenGraphWindow()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
// ESC press event
|
|
void StatgenGraphWindow::keyPressEvent(QKeyEvent *pressedKey)
|
|
{
|
|
if (pressedKey->key() == Qt::Key_Escape)
|
|
close();
|
|
}
|
|
|
|
void StatgenGraphWindow::paintGraph()
|
|
{
|
|
plot = new QwtPlot(ui->centralwidget);
|
|
plot->setMinimumSize(QSize(322, 280));
|
|
ui->verticalLayout->addWidget(plot);
|
|
|
|
plot->setFont(QFont("Times New Roman", 8, QFont::Bold));
|
|
plot->setAxisFont(QwtPlot::xBottom, QFont("Times New Roman", 8, QFont::Bold));
|
|
plot->setAxisFont(QwtPlot::yLeft, QFont("Times New Roman", 8, QFont::Bold));
|
|
plot->setAxisAutoScale(QwtPlot::xBottom, true);
|
|
plot->setAxisAutoScale(QwtPlot::yLeft, true);
|
|
plot->setAutoReplot(true);
|
|
|
|
QPen pen;
|
|
switch (type)
|
|
{
|
|
case 0:
|
|
plot->setAxisTitle(QwtPlot::xBottom, trUtf8("N"));
|
|
plot->setAxisTitle(QwtPlot::yLeft, trUtf8("p"));
|
|
|
|
pen = QPen(QColor(0,0,0));
|
|
QwtPlotCurve *p_curve;
|
|
p_curve = new QwtPlotCurve(QString("p"));
|
|
p_curve->setPen(pen);
|
|
p_curve->attach(plot);
|
|
p_curve->setSamples(x_axis, p_points);
|
|
|
|
QwtPlotCurve *pn_curve;
|
|
pen = QPen(QColor(255,0,0));
|
|
pn_curve = new QwtPlotCurve(QString("pn"));
|
|
pn_curve->setPen(pen);
|
|
pn_curve->attach(plot);
|
|
pn_curve->setSamples(x_axis, pn_points);
|
|
break;
|
|
case 1:
|
|
plot->setAxisTitle(QwtPlot::xBottom, trUtf8("r"));
|
|
plot->setAxisTitle(QwtPlot::yLeft, trUtf8("g"));
|
|
|
|
pen = QPen(QColor(0,0,0));
|
|
QwtPlotCurve *radf_curve;
|
|
radf_curve = new QwtPlotCurve(QString("RDF"));
|
|
radf_curve->setPen(pen);
|
|
radf_curve->attach(plot);
|
|
radf_curve->setSamples(x_axis, p_points);
|
|
break;
|
|
}
|
|
plot->replot();
|
|
}
|
|
|
|
void StatgenGraphWindow::readData()
|
|
{
|
|
QString tmp_str;
|
|
QFile inp_file(_inputfile);
|
|
inp_file.open(QIODevice::ReadOnly);
|
|
tmp_str = QString(inp_file.readLine());
|
|
int matrix=0;
|
|
if (tmp_str.contains(QString("statgen")))
|
|
type = 0;
|
|
else if (tmp_str.contains(QString("radf")))
|
|
type = 1;
|
|
while (!tmp_str.contains(QString("SUMMARY STATISTIC")))
|
|
{
|
|
tmp_str = QString(inp_file.readLine());
|
|
if ((type == 1) && (tmp_str.contains(QString("MATRIX="))))
|
|
matrix = tmp_str.split(QString("MATRIX="), QString::SkipEmptyParts)[0].toInt();
|
|
}
|
|
if (matrix == 0)
|
|
{
|
|
tmp_str = QString(inp_file.readLine());
|
|
tmp_str = QString(inp_file.readLine());
|
|
}
|
|
|
|
switch(type)
|
|
{
|
|
case 0:
|
|
tmp_str = QString(inp_file.readLine());
|
|
while (!tmp_str.contains(QString("---")))
|
|
{
|
|
x_axis.append(tmp_str.split(QString(" "), QString::SkipEmptyParts)[0].toDouble());
|
|
p_points.append(tmp_str.split(QString(" "), QString::SkipEmptyParts)[3].toDouble());
|
|
pn_points.append(tmp_str.split(QString(" "), QString::SkipEmptyParts)[4].toDouble());
|
|
tmp_str = QString(inp_file.readLine());
|
|
}
|
|
break;
|
|
case 1:
|
|
tmp_str = QString(inp_file.readLine());
|
|
while (!tmp_str.contains(QString("---")))
|
|
{
|
|
x_axis.append(tmp_str.split(QString(" "), QString::SkipEmptyParts)[0].toDouble());
|
|
switch(matrix)
|
|
{
|
|
case 0:
|
|
p_points.append(tmp_str.split(QString(" "), QString::SkipEmptyParts)[3].toDouble());
|
|
break;
|
|
case 1:
|
|
p_points.append(tmp_str.split(QString(" "), QString::SkipEmptyParts)[1].toDouble());
|
|
break;
|
|
}
|
|
tmp_str = QString(inp_file.readLine());
|
|
}
|
|
break;
|
|
}
|
|
inp_file.close();
|
|
}
|
|
|
|
void StatgenGraphWindow::on_graph_pushButton_save_clicked()
|
|
{
|
|
QPixmap qPix = QPixmap::grabWidget(plot);
|
|
QString filename = QFileDialog::getSaveFileName(
|
|
this,
|
|
tr("Save image as..."),
|
|
QDir::currentPath(),
|
|
tr("JPEG file (*.jpeg);;Portable Network Graphics file (*.png);;Bitmap file (*.bmp)"));
|
|
if (!filename.isEmpty())
|
|
{
|
|
if (filename.contains(QRegExp("jpeg")))
|
|
qPix.save(filename, "JPEG");
|
|
else if (filename.contains(QRegExp("png")))
|
|
qPix.save(filename, "PNG");
|
|
else if (filename.contains(QRegExp("bmp")))
|
|
qPix.save(filename, "BMP");
|
|
}
|
|
}
|