diff --git a/tools/lammps-gui/icons/move-recenter.png b/tools/lammps-gui/icons/move-recenter.png
new file mode 100644
index 0000000000..6de5429306
Binary files /dev/null and b/tools/lammps-gui/icons/move-recenter.png differ
diff --git a/tools/lammps-gui/imageviewer.cpp b/tools/lammps-gui/imageviewer.cpp
index 388f4251ae..012a8681a5 100644
--- a/tools/lammps-gui/imageviewer.cpp
+++ b/tools/lammps-gui/imageviewer.cpp
@@ -152,6 +152,7 @@ ImageViewer::ImageViewer(const QString &fileName, LammpsWrapper *_lammps, QWidge
vdwfactor = 0.5;
auto pix = QPixmap(":/icons/emblem-photos.png");
+ xcenter = ycenter = zcenter = 0.5;
auto *renderstatus = new QLabel(QString());
renderstatus->setPixmap(pix.scaled(22, 22, Qt::KeepAspectRatio));
@@ -211,6 +212,8 @@ ImageViewer::ImageViewer(const QString &fileName, LammpsWrapper *_lammps, QWidge
rotup->setToolTip("Rotate up by 15 degrees");
auto *rotdown = new QPushButton(QIcon(":/icons/gtk-go-down.png"), "");
rotdown->setToolTip("Rotate down by 15 degrees");
+ auto *recenter = new QPushButton(QIcon(":/icons/move-recenter.png"), "");
+ recenter->setToolTip("Recenter on group");
auto *reset = new QPushButton(QIcon(":/icons/gtk-zoom-fit.png"), "");
reset->setToolTip("Reset view to defaults");
auto *combo = new QComboBox;
@@ -245,6 +248,7 @@ ImageViewer::ImageViewer(const QString &fileName, LammpsWrapper *_lammps, QWidge
menuLayout->addWidget(rotright);
menuLayout->addWidget(rotup);
menuLayout->addWidget(rotdown);
+ menuLayout->addWidget(recenter);
menuLayout->addWidget(reset);
menuLayout->addWidget(new QLabel(" Group: "));
menuLayout->addWidget(combo);
@@ -260,6 +264,7 @@ ImageViewer::ImageViewer(const QString &fileName, LammpsWrapper *_lammps, QWidge
connect(rotright, &QPushButton::released, this, &ImageViewer::do_rot_right);
connect(rotup, &QPushButton::released, this, &ImageViewer::do_rot_up);
connect(rotdown, &QPushButton::released, this, &ImageViewer::do_rot_down);
+ connect(recenter, &QPushButton::released, this, &ImageViewer::do_recenter);
connect(reset, &QPushButton::released, this, &ImageViewer::reset_view);
connect(combo, SIGNAL(currentIndexChanged(int)), this, SLOT(change_group(int)));
@@ -301,6 +306,7 @@ void ImageViewer::reset_view()
showaxes = settings.value("axes", false).toBool();
usessao = settings.value("ssao", false).toBool();
antialias = settings.value("antialias", false).toBool();
+ xcenter = ycenter = zcenter = 0.5;
settings.endGroup();
// reset state of checkable push buttons and combo box (if accessible)
@@ -421,6 +427,24 @@ void ImageViewer::do_rot_up()
createImage();
}
+void ImageViewer::do_recenter()
+{
+ QString commands = QString("variable LAMMPSGUI_CX delete\n"
+ "variable LAMMPSGUI_CY delete\n"
+ "variable LAMMPSGUI_CZ delete\n"
+ "variable LAMMPSGUI_CX equal (xcm(%1,x)-xlo)/lx\n"
+ "variable LAMMPSGUI_CY equal (xcm(%1,y)-ylo)/ly\n"
+ "variable LAMMPSGUI_CZ equal (xcm(%1,z)-zlo)/lz\n").arg(group);
+ lammps->commands_string(commands.toLocal8Bit());
+ xcenter = lammps->extract_variable("LAMMPSGUI_CX");
+ ycenter = lammps->extract_variable("LAMMPSGUI_CZ");
+ zcenter = lammps->extract_variable("LAMMPSGUI_CZ");
+ lammps->commands_string("variable LAMMPSGUI_CX delete\n"
+ "variable LAMMPSGUI_CY delete\n"
+ "variable LAMMPSGUI_CZ delete\n");
+ createImage();
+}
+
void ImageViewer::cmd_to_clipboard()
{
auto words = last_dump_cmd.split(" ");
@@ -534,6 +558,7 @@ void ImageViewer::createImage()
else
dumpcmd += " axes no 0.0 0.0";
+ dumpcmd += QString(" center s %1 %2 %3").arg(xcenter).arg(ycenter).arg(zcenter);
dumpcmd += " modify boxcolor " + settings.value("boxcolor", "yellow").toString();
dumpcmd += " backcolor " + settings.value("background", "black").toString();
if (useelements) dumpcmd += blank + elements + blank + adiams + blank;
diff --git a/tools/lammps-gui/imageviewer.h b/tools/lammps-gui/imageviewer.h
index 9612a0e5d9..f9b935640e 100644
--- a/tools/lammps-gui/imageviewer.h
+++ b/tools/lammps-gui/imageviewer.h
@@ -55,6 +55,7 @@ private slots:
void do_rot_right();
void do_rot_up();
void do_rot_down();
+ void do_recenter();
void cmd_to_clipboard();
void change_group(int);
@@ -90,6 +91,7 @@ private:
int xsize, ysize;
int hrot, vrot;
double zoom, vdwfactor;
+ double xcenter, ycenter, zcenter;
bool showbox, showaxes, antialias, usessao, useelements, usediameter, usesigma;
};
#endif
diff --git a/tools/lammps-gui/lammpsgui.qrc b/tools/lammps-gui/lammpsgui.qrc
index fa09b6426b..eb7c1fbc19 100644
--- a/tools/lammps-gui/lammpsgui.qrc
+++ b/tools/lammps-gui/lammpsgui.qrc
@@ -45,6 +45,7 @@
icons/image-x-generic.png
icons/media-playback-start-2.png
icons/media-playlist-repeat.png
+ icons/move-recenter.png
icons/object-rotate-left.png
icons/object-rotate-right.png
icons/ovito.png