add support for Image rendering with up to 4x4 antialiasing and SSAO mode

This commit is contained in:
Axel Kohlmeyer
2023-08-10 21:16:17 -04:00
parent 4fb5135887
commit 55d0b84428
3 changed files with 42 additions and 10 deletions

View File

@ -30,6 +30,7 @@
#include <QScreen>
#include <QScrollArea>
#include <QScrollBar>
#include <QSettings>
#include <QStatusBar>
#include <QVBoxLayout>
#include <QWheelEvent>
@ -63,7 +64,7 @@ ImageViewer::ImageViewer(const QString &fileName, LammpsWrapper *_lammps, QWidge
menuLayout->addWidget(new QPushButton("Rotate Up"));
menuLayout->addWidget(new QPushButton("Rotate Down"));
menuLayout->addWidget(new QComboBox);
mainLayout->addLayout(menuLayout);
mainLayout->addWidget(scrollArea);
mainLayout->addWidget(buttonBox);
@ -74,12 +75,19 @@ ImageViewer::ImageViewer(const QString &fileName, LammpsWrapper *_lammps, QWidge
QImageReader reader(fileName);
reader.setAutoTransform(true);
const QImage newImage = reader.read();
if (newImage.isNull()) {
QMessageBox::warning(this, QGuiApplication::applicationDisplayName(),
tr("Cannot load %1: %2").arg(fileName, reader.errorString()));
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));
scaleFactor = 1.0;
resize(image.width() + 20, image.height() + 50);

View File

@ -728,11 +728,15 @@ void LammpsGui::view_image()
dumpcmd += dumpfile;
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("diameter", "type").toString();
dumpcmd += QString(" size ") + settings.value("xsize", "800").toString();
dumpcmd += blank + settings.value("ysize", "600").toString();
dumpcmd += QString(" size ") + QString::number(xsize) + blank + QString::number(ysize);
dumpcmd += QString(" zoom ") + settings.value("zoom", "1.0").toString();
if (settings.value("ssao",false).toBool()) dumpcmd += QString(" ssao yes 453983 0.6");
settings.endGroup();
lammps.command(dumpcmd.toLocal8Bit());

View File

@ -19,6 +19,7 @@
#include <QApplication>
#include <QCheckBox>
#include <QComboBox>
#include <QCoreApplication>
#include <QDialogButtonBox>
#include <QDir>
@ -103,7 +104,7 @@ void Preferences::accept()
if (field)
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");
field = tabWidget->findChild<QLineEdit *>("xsize");
@ -115,10 +116,14 @@ void Preferences::accept()
field = tabWidget->findChild<QLineEdit *>("zoom");
if (field)
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();
// general settings
QCheckBox *box = tabWidget->findChild<QCheckBox *>("echo");
box = tabWidget->findChild<QCheckBox *>("echo");
if (box) settings->setValue("echo", box->isChecked());
box = tabWidget->findChild<QCheckBox *>("cite");
if (box) settings->setValue("cite", box->isChecked());
@ -130,7 +135,6 @@ void Preferences::accept()
if (box) settings->setValue("viewlog", box->isChecked());
box = tabWidget->findChild<QCheckBox *>("viewchart");
if (box) settings->setValue("viewchart", box->isChecked());
QDialog::accept();
}
@ -376,10 +380,22 @@ SnapshotTab::SnapshotTab(QSettings *_settings, QWidget *parent) :
auto *xsize = new QLabel("Image width:");
auto *ysize = new QLabel("Image height:");
auto *zoom = new QLabel("Zoom factor:");
auto *anti = new QLabel("Antialias:");
auto *ssao = new QLabel("HQ Image mode:");
settings->beginGroup("snapshot");
auto *xval = new QLineEdit(settings->value("xsize", "800").toString());
auto *yval = new QLineEdit(settings->value("ysize", "600").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();
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(ysize, 1, 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(yval, 1, 1, Qt::AlignTop);
grid->addWidget(zval, 2, 1, Qt::AlignTop);
grid->addItem(new QSpacerItem(100, 100, QSizePolicy::Minimum, QSizePolicy::Expanding), 3, 0);
grid->addItem(new QSpacerItem(100, 100, QSizePolicy::Minimum, QSizePolicy::Expanding), 3, 1);
grid->addItem(new QSpacerItem(100, 100, QSizePolicy::Expanding, QSizePolicy::Expanding), 3, 2);
grid->addWidget(aval, 3, 1, Qt::AlignTop);
grid->addWidget(sval, 4, 1, Qt::AlignVCenter);
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);
}