add support for Image rendering with up to 4x4 antialiasing and SSAO mode
This commit is contained in:
@ -30,6 +30,7 @@
|
|||||||
#include <QScreen>
|
#include <QScreen>
|
||||||
#include <QScrollArea>
|
#include <QScrollArea>
|
||||||
#include <QScrollBar>
|
#include <QScrollBar>
|
||||||
|
#include <QSettings>
|
||||||
#include <QStatusBar>
|
#include <QStatusBar>
|
||||||
#include <QVBoxLayout>
|
#include <QVBoxLayout>
|
||||||
#include <QWheelEvent>
|
#include <QWheelEvent>
|
||||||
@ -74,12 +75,19 @@ ImageViewer::ImageViewer(const QString &fileName, LammpsWrapper *_lammps, QWidge
|
|||||||
QImageReader reader(fileName);
|
QImageReader reader(fileName);
|
||||||
reader.setAutoTransform(true);
|
reader.setAutoTransform(true);
|
||||||
const QImage newImage = reader.read();
|
const QImage newImage = reader.read();
|
||||||
|
|
||||||
if (newImage.isNull()) {
|
if (newImage.isNull()) {
|
||||||
QMessageBox::warning(this, QGuiApplication::applicationDisplayName(),
|
QMessageBox::warning(this, QGuiApplication::applicationDisplayName(),
|
||||||
tr("Cannot load %1: %2").arg(fileName, reader.errorString()));
|
tr("Cannot load %1: %2").arg(fileName, reader.errorString()));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
image = newImage;
|
QSettings settings;
|
||||||
|
settings.beginGroup("snapshot");
|
||||||
|
int xsize = settings.value("xsize", 800).toInt();
|
||||||
|
int ysize = settings.value("ysize", 600).toInt();
|
||||||
|
settings.endGroup();
|
||||||
|
// scale back to achieve antialiasing
|
||||||
|
image = newImage.scaled(xsize, ysize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
|
||||||
imageLabel->setPixmap(QPixmap::fromImage(image));
|
imageLabel->setPixmap(QPixmap::fromImage(image));
|
||||||
scaleFactor = 1.0;
|
scaleFactor = 1.0;
|
||||||
resize(image.width() + 20, image.height() + 50);
|
resize(image.width() + 20, image.height() + 50);
|
||||||
|
|||||||
@ -728,11 +728,15 @@ void LammpsGui::view_image()
|
|||||||
dumpcmd += dumpfile;
|
dumpcmd += dumpfile;
|
||||||
|
|
||||||
settings.beginGroup("snapshot");
|
settings.beginGroup("snapshot");
|
||||||
|
int aa = settings.value("antialias", 0).toInt() + 1;
|
||||||
|
int xsize = settings.value("xsize", 800).toInt() * aa;
|
||||||
|
int ysize = settings.value("ysize", 800).toInt() * aa;
|
||||||
|
|
||||||
dumpcmd += blank + settings.value("color", "type").toString();
|
dumpcmd += blank + settings.value("color", "type").toString();
|
||||||
dumpcmd += blank + settings.value("diameter", "type").toString();
|
dumpcmd += blank + settings.value("diameter", "type").toString();
|
||||||
dumpcmd += QString(" size ") + settings.value("xsize", "800").toString();
|
dumpcmd += QString(" size ") + QString::number(xsize) + blank + QString::number(ysize);
|
||||||
dumpcmd += blank + settings.value("ysize", "600").toString();
|
|
||||||
dumpcmd += QString(" zoom ") + settings.value("zoom", "1.0").toString();
|
dumpcmd += QString(" zoom ") + settings.value("zoom", "1.0").toString();
|
||||||
|
if (settings.value("ssao",false).toBool()) dumpcmd += QString(" ssao yes 453983 0.6");
|
||||||
settings.endGroup();
|
settings.endGroup();
|
||||||
|
|
||||||
lammps.command(dumpcmd.toLocal8Bit());
|
lammps.command(dumpcmd.toLocal8Bit());
|
||||||
|
|||||||
@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QCheckBox>
|
#include <QCheckBox>
|
||||||
|
#include <QComboBox>
|
||||||
#include <QCoreApplication>
|
#include <QCoreApplication>
|
||||||
#include <QDialogButtonBox>
|
#include <QDialogButtonBox>
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
@ -103,7 +104,7 @@ void Preferences::accept()
|
|||||||
if (field)
|
if (field)
|
||||||
if (field->hasAcceptableInput()) settings->setValue("tempdir", field->text());
|
if (field->hasAcceptableInput()) settings->setValue("tempdir", field->text());
|
||||||
|
|
||||||
// store image width, height, and zoom
|
// store image width, height, zoom, and rendering settings
|
||||||
|
|
||||||
settings->beginGroup("snapshot");
|
settings->beginGroup("snapshot");
|
||||||
field = tabWidget->findChild<QLineEdit *>("xsize");
|
field = tabWidget->findChild<QLineEdit *>("xsize");
|
||||||
@ -115,10 +116,14 @@ void Preferences::accept()
|
|||||||
field = tabWidget->findChild<QLineEdit *>("zoom");
|
field = tabWidget->findChild<QLineEdit *>("zoom");
|
||||||
if (field)
|
if (field)
|
||||||
if (field->hasAcceptableInput()) settings->setValue("zoom", field->text());
|
if (field->hasAcceptableInput()) settings->setValue("zoom", field->text());
|
||||||
|
QComboBox *combo = tabWidget->findChild<QComboBox *>("anti");
|
||||||
|
if (combo) settings->setValue("antialias", combo->currentIndex());
|
||||||
|
QCheckBox *box = tabWidget->findChild<QCheckBox *>("ssao");
|
||||||
|
if (box) settings->setValue("ssao", box->isChecked());
|
||||||
settings->endGroup();
|
settings->endGroup();
|
||||||
|
|
||||||
// general settings
|
// general settings
|
||||||
QCheckBox *box = tabWidget->findChild<QCheckBox *>("echo");
|
box = tabWidget->findChild<QCheckBox *>("echo");
|
||||||
if (box) settings->setValue("echo", box->isChecked());
|
if (box) settings->setValue("echo", box->isChecked());
|
||||||
box = tabWidget->findChild<QCheckBox *>("cite");
|
box = tabWidget->findChild<QCheckBox *>("cite");
|
||||||
if (box) settings->setValue("cite", box->isChecked());
|
if (box) settings->setValue("cite", box->isChecked());
|
||||||
@ -130,7 +135,6 @@ void Preferences::accept()
|
|||||||
if (box) settings->setValue("viewlog", box->isChecked());
|
if (box) settings->setValue("viewlog", box->isChecked());
|
||||||
box = tabWidget->findChild<QCheckBox *>("viewchart");
|
box = tabWidget->findChild<QCheckBox *>("viewchart");
|
||||||
if (box) settings->setValue("viewchart", box->isChecked());
|
if (box) settings->setValue("viewchart", box->isChecked());
|
||||||
|
|
||||||
QDialog::accept();
|
QDialog::accept();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -376,10 +380,22 @@ SnapshotTab::SnapshotTab(QSettings *_settings, QWidget *parent) :
|
|||||||
auto *xsize = new QLabel("Image width:");
|
auto *xsize = new QLabel("Image width:");
|
||||||
auto *ysize = new QLabel("Image height:");
|
auto *ysize = new QLabel("Image height:");
|
||||||
auto *zoom = new QLabel("Zoom factor:");
|
auto *zoom = new QLabel("Zoom factor:");
|
||||||
|
auto *anti = new QLabel("Antialias:");
|
||||||
|
auto *ssao = new QLabel("HQ Image mode:");
|
||||||
settings->beginGroup("snapshot");
|
settings->beginGroup("snapshot");
|
||||||
auto *xval = new QLineEdit(settings->value("xsize", "800").toString());
|
auto *xval = new QLineEdit(settings->value("xsize", "800").toString());
|
||||||
auto *yval = new QLineEdit(settings->value("ysize", "600").toString());
|
auto *yval = new QLineEdit(settings->value("ysize", "600").toString());
|
||||||
auto *zval = new QLineEdit(settings->value("zoom", "1.0").toString());
|
auto *zval = new QLineEdit(settings->value("zoom", "1.0").toString());
|
||||||
|
auto *aval = new QComboBox;
|
||||||
|
auto *sval = new QCheckBox;
|
||||||
|
sval->setCheckState(settings->value("ssao", false).toBool() ? Qt::Checked : Qt::Unchecked);
|
||||||
|
sval->setObjectName("ssao");
|
||||||
|
aval->addItem("1x", 1);
|
||||||
|
aval->addItem("2x", 2);
|
||||||
|
aval->addItem("3x", 3);
|
||||||
|
aval->addItem("4x", 4);
|
||||||
|
aval->setCurrentIndex(settings->value("antialias", "0").toInt());
|
||||||
|
aval->setObjectName("anti");
|
||||||
settings->endGroup();
|
settings->endGroup();
|
||||||
|
|
||||||
auto *intval = new QIntValidator(100, 100000, this);
|
auto *intval = new QIntValidator(100, 100000, this);
|
||||||
@ -393,12 +409,16 @@ SnapshotTab::SnapshotTab(QSettings *_settings, QWidget *parent) :
|
|||||||
grid->addWidget(xsize, 0, 0, Qt::AlignTop);
|
grid->addWidget(xsize, 0, 0, Qt::AlignTop);
|
||||||
grid->addWidget(ysize, 1, 0, Qt::AlignTop);
|
grid->addWidget(ysize, 1, 0, Qt::AlignTop);
|
||||||
grid->addWidget(zoom, 2, 0, Qt::AlignTop);
|
grid->addWidget(zoom, 2, 0, Qt::AlignTop);
|
||||||
|
grid->addWidget(anti, 3, 0, Qt::AlignTop);
|
||||||
|
grid->addWidget(ssao, 4, 0, Qt::AlignTop);
|
||||||
grid->addWidget(xval, 0, 1, Qt::AlignTop);
|
grid->addWidget(xval, 0, 1, Qt::AlignTop);
|
||||||
grid->addWidget(yval, 1, 1, Qt::AlignTop);
|
grid->addWidget(yval, 1, 1, Qt::AlignTop);
|
||||||
grid->addWidget(zval, 2, 1, Qt::AlignTop);
|
grid->addWidget(zval, 2, 1, Qt::AlignTop);
|
||||||
grid->addItem(new QSpacerItem(100, 100, QSizePolicy::Minimum, QSizePolicy::Expanding), 3, 0);
|
grid->addWidget(aval, 3, 1, Qt::AlignTop);
|
||||||
grid->addItem(new QSpacerItem(100, 100, QSizePolicy::Minimum, QSizePolicy::Expanding), 3, 1);
|
grid->addWidget(sval, 4, 1, Qt::AlignVCenter);
|
||||||
grid->addItem(new QSpacerItem(100, 100, QSizePolicy::Expanding, QSizePolicy::Expanding), 3, 2);
|
grid->addItem(new QSpacerItem(100, 100, QSizePolicy::Minimum, QSizePolicy::Expanding), 5, 0);
|
||||||
|
grid->addItem(new QSpacerItem(100, 100, QSizePolicy::Minimum, QSizePolicy::Expanding), 5, 1);
|
||||||
|
grid->addItem(new QSpacerItem(100, 100, QSizePolicy::Expanding, QSizePolicy::Expanding), 5, 2);
|
||||||
setLayout(grid);
|
setLayout(grid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user