more image window tweaks

- add image windows to View menu
- add setting to replace old image view instead of creating a new one
- add setting to turn on/off box
- add setting to turn on/off axes
This commit is contained in:
Axel Kohlmeyer
2023-08-11 03:25:58 -04:00
parent 93e67c9388
commit 035620d252
7 changed files with 75 additions and 16 deletions

View File

@ -1,6 +1,6 @@
cmake_minimum_required(VERSION 3.16)
project(lammps-gui VERSION 1.1.5 LANGUAGES CXX)
project(lammps-gui VERSION 1.1.6 LANGUAGES CXX)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)

View File

@ -58,12 +58,12 @@ ImageViewer::ImageViewer(const QString &fileName, LammpsWrapper *_lammps, QWidge
QVBoxLayout *mainLayout = new QVBoxLayout;
auto *zoomin = new QPushButton(QIcon(":/gtk-zoom-in.png"), "Zoom In");
auto *zoomout = new QPushButton(QIcon(":/gtk-zoom-out.png"),"Zoom Out");
auto *rotleft = new QPushButton(QIcon(":/object-rotate-left.png"), "Rotate Left");
auto *rotright = new QPushButton(QIcon(":/object-rotate-right.png"), "Rotate Right");
auto *rotup = new QPushButton(QIcon(":/gtk-go-up.png"),"Rotate Up");
auto *rotdown = new QPushButton(QIcon(":/gtk-go-down.png"),"Rotate Down");
auto *zoomin = new QPushButton(QIcon(":/gtk-zoom-in.png"), "");
auto *zoomout = new QPushButton(QIcon(":/gtk-zoom-out.png"), "");
auto *rotleft = new QPushButton(QIcon(":/object-rotate-left.png"), "");
auto *rotright = new QPushButton(QIcon(":/object-rotate-right.png"), "");
auto *rotup = new QPushButton(QIcon(":/gtk-go-up.png"), "");
auto *rotdown = new QPushButton(QIcon(":/gtk-go-down.png"), "");
auto *combo = new QComboBox;
combo->setObjectName("group");
int ngroup = lammps->id_count("group");
@ -148,14 +148,14 @@ void ImageViewer::do_rot_right()
void ImageViewer::do_rot_down()
{
hrot -= 15;
if (hrot < -0) hrot += 180;
if (hrot < 0) hrot += 360;
createImage();
}
void ImageViewer::do_rot_up()
{
hrot += 15;
if (hrot > 180) hrot -= 180;
if (hrot > 360) hrot -= 360;
createImage();
}
@ -178,6 +178,7 @@ void ImageViewer::createImage()
int aa = settings.value("antialias", 0).toInt() + 1;
int xsize = settings.value("xsize", 800).toInt() * aa;
int ysize = settings.value("ysize", 600).toInt() * aa;
int hhrot = (hrot > 180) ? 360 - hrot : hrot;
dumpcmd += blank + settings.value("color", "type").toString();
dumpcmd += blank + settings.value("diameter", "type").toString();
@ -185,9 +186,18 @@ void ImageViewer::createImage()
dumpcmd += QString(" zoom ") + QString::number(zoom);
lammps->command(dumpcmd.toLocal8Bit());
if (lammps->extract_setting("dimension") == 3) {
dumpcmd += QString(" view ") + QString::number(hrot) + blank + QString::number(vrot);
dumpcmd += QString(" view ") + QString::number(hhrot) + blank + QString::number(vrot);
}
if (settings.value("ssao", false).toBool()) dumpcmd += QString(" ssao yes 453983 0.6");
if (settings.value("box", true).toBool())
dumpcmd += QString(" box yes 0.02");
else
dumpcmd += QString(" box no 0.0");
if (settings.value("axes", true).toBool())
dumpcmd += QString(" axes yes 0.2 0.02");
else
dumpcmd += QString(" axes no 0.0 0.0");
settings.endGroup();
lammps->command(dumpcmd.toLocal8Bit());

View File

@ -53,9 +53,10 @@ private slots:
void do_rot_down();
void change_group(int);
public:
void createImage();
private:
void createActions();
void createImage();
void updateActions();
void saveFile(const QString &fileName);
void scaleImage(double factor);

View File

@ -177,7 +177,7 @@ LammpsGui::LammpsGui(QWidget *parent, const char *filename) :
connect(ui->actionRedo, &QAction::triggered, this, &LammpsGui::redo);
connect(ui->actionRun_Buffer, &QAction::triggered, this, &LammpsGui::run_buffer);
connect(ui->actionStop_LAMMPS, &QAction::triggered, this, &LammpsGui::stop_run);
connect(ui->actionImage, &QAction::triggered, this, &LammpsGui::view_image);
connect(ui->actionImage, &QAction::triggered, this, &LammpsGui::render_image);
connect(ui->actionAbout_LAMMPS_GUI, &QAction::triggered, this, &LammpsGui::about);
connect(ui->action_Help, &QAction::triggered, this, &LammpsGui::help);
connect(ui->actionLAMMPS_Manual, &QAction::triggered, this, &LammpsGui::manual);
@ -185,6 +185,7 @@ LammpsGui::LammpsGui(QWidget *parent, const char *filename) :
connect(ui->actionDefaults, &QAction::triggered, this, &LammpsGui::defaults);
connect(ui->actionView_Log_Window, &QAction::triggered, this, &LammpsGui::view_log);
connect(ui->actionView_Graph_Window, &QAction::triggered, this, &LammpsGui::view_chart);
connect(ui->actionView_Image_Window, &QAction::triggered, this, &LammpsGui::view_image);
connect(ui->action_1, &QAction::triggered, this, &LammpsGui::open_recent);
connect(ui->action_2, &QAction::triggered, this, &LammpsGui::open_recent);
connect(ui->action_3, &QAction::triggered, this, &LammpsGui::open_recent);
@ -704,7 +705,7 @@ void LammpsGui::run_buffer()
logupdater->start(250);
}
void LammpsGui::view_image()
void LammpsGui::render_image()
{
// LAMMPS is not re-entrant, so we can only query LAMMPS when it is not running
if (!lammps.is_running()) {
@ -714,6 +715,8 @@ void LammpsGui::view_image()
"Cannot create snapshot image without a system box");
return;
}
// if configured, delete old image window before opening new one
if (QSettings().value("imagereplace", false).toBool()) delete imagewindow;
imagewindow = new ImageViewer(current_file, &lammps);
} else {
QMessageBox::warning(this, "ImageViewer Error",
@ -756,6 +759,17 @@ void LammpsGui::view_log()
}
}
void LammpsGui::view_image()
{
if (imagewindow) {
if (imagewindow->isVisible()) {
imagewindow->hide();
} else {
imagewindow->show();
}
}
}
void LammpsGui::about()
{
std::string version = "This is LAMMPS-GUI version " LAMMPS_GUI_VERSION;
@ -871,6 +885,7 @@ void LammpsGui::preferences()
(oldecho != settings.value("echo", 0).toInt()) ||
(oldcite != settings.value("cite", 0).toInt()))
lammps.close();
if (imagewindow) imagewindow->createImage();
}
}

View File

@ -75,6 +75,7 @@ private slots:
void clear();
void run_buffer();
void stop_run();
void render_image();
void view_image();
void view_chart();
void view_log();

View File

@ -86,6 +86,7 @@
</property>
<addaction name="actionView_Log_Window"/>
<addaction name="actionView_Graph_Window"/>
<addaction name="actionView_Image_Window"/>
</widget>
<addaction name="menuFile"/>
<addaction name="menuEdit"/>
@ -404,6 +405,14 @@
<string>&amp;5.</string>
</property>
</action>
<action name="actionView_Image_Window">
<property name="icon">
<iconset theme="emblem-photos"/>
</property>
<property name="text">
<string>&amp;Image Window</string>
</property>
</action>
</widget>
<customwidgets>
<customwidget>

View File

@ -120,6 +120,10 @@ void Preferences::accept()
if (combo) settings->setValue("antialias", combo->currentIndex());
QCheckBox *box = tabWidget->findChild<QCheckBox *>("ssao");
if (box) settings->setValue("ssao", box->isChecked());
box = tabWidget->findChild<QCheckBox *>("box");
if (box) settings->setValue("box", box->isChecked());
box = tabWidget->findChild<QCheckBox *>("axes");
if (box) settings->setValue("axes", box->isChecked());
settings->endGroup();
// general settings
@ -131,6 +135,8 @@ void Preferences::accept()
if (box) settings->setValue("logreplace", box->isChecked());
box = tabWidget->findChild<QCheckBox *>("chartreplace");
if (box) settings->setValue("chartreplace", box->isChecked());
box = tabWidget->findChild<QCheckBox *>("imagereplace");
if (box) settings->setValue("imagereplace", box->isChecked());
box = tabWidget->findChild<QCheckBox *>("viewlog");
if (box) settings->setValue("viewlog", box->isChecked());
box = tabWidget->findChild<QCheckBox *>("viewchart");
@ -159,6 +165,10 @@ GeneralTab::GeneralTab(QSettings *_settings, LammpsWrapper *_lammps, QWidget *pa
logr->setObjectName("logreplace");
logr->setCheckState(settings->value("logreplace", false).toBool() ? Qt::Checked
: Qt::Unchecked);
auto *imgr = new QCheckBox("Replace image window on new render");
imgr->setObjectName("imagereplace");
imgr->setCheckState(settings->value("imagereplace", false).toBool() ? Qt::Checked
: Qt::Unchecked);
auto *pltr = new QCheckBox("Replace chart window on new run");
pltr->setObjectName("chartreplace");
pltr->setCheckState(settings->value("chartreplace", false).toBool() ? Qt::Checked
@ -202,6 +212,7 @@ GeneralTab::GeneralTab(QSettings *_settings, LammpsWrapper *_lammps, QWidget *pa
layout->addWidget(pltv);
layout->addWidget(logr);
layout->addWidget(pltr);
layout->addWidget(imgr);
#if !defined(__APPLE__)
layout->addLayout(tmplayout);
#endif
@ -382,12 +393,16 @@ SnapshotTab::SnapshotTab(QSettings *_settings, QWidget *parent) :
auto *zoom = new QLabel("Zoom factor:");
auto *anti = new QLabel("Antialias:");
auto *ssao = new QLabel("HQ Image mode:");
auto *bbox = new QLabel("Show Box:");
auto *axes = new QLabel("Show Axes:");
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;
auto *bval = new QCheckBox;
auto *eval = new QCheckBox;
sval->setCheckState(settings->value("ssao", false).toBool() ? Qt::Checked : Qt::Unchecked);
sval->setObjectName("ssao");
aval->addItem("1x", 1);
@ -396,6 +411,10 @@ SnapshotTab::SnapshotTab(QSettings *_settings, QWidget *parent) :
aval->addItem("4x", 4);
aval->setCurrentIndex(settings->value("antialias", "0").toInt());
aval->setObjectName("anti");
bval->setCheckState(settings->value("box", true).toBool() ? Qt::Checked : Qt::Unchecked);
bval->setObjectName("box");
eval->setCheckState(settings->value("axes", false).toBool() ? Qt::Checked : Qt::Unchecked);
eval->setObjectName("axes");
settings->endGroup();
auto *intval = new QIntValidator(100, 100000, this);
@ -411,14 +430,18 @@ SnapshotTab::SnapshotTab(QSettings *_settings, QWidget *parent) :
grid->addWidget(zoom, 2, 0, Qt::AlignTop);
grid->addWidget(anti, 3, 0, Qt::AlignTop);
grid->addWidget(ssao, 4, 0, Qt::AlignTop);
grid->addWidget(bbox, 5, 0, Qt::AlignTop);
grid->addWidget(axes, 6, 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->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);
grid->addWidget(bval, 5, 1, Qt::AlignVCenter);
grid->addWidget(eval, 6, 1, Qt::AlignVCenter);
grid->addItem(new QSpacerItem(100, 100, QSizePolicy::Minimum, QSizePolicy::Expanding), 7, 0);
grid->addItem(new QSpacerItem(100, 100, QSizePolicy::Minimum, QSizePolicy::Expanding), 7, 1);
grid->addItem(new QSpacerItem(100, 100, QSizePolicy::Expanding, QSizePolicy::Expanding), 7, 2);
setLayout(grid);
}