From 15c2c59d0c7b64572011adfec2e83bfb9681259c Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Mon, 29 Jul 2024 00:06:38 -0400 Subject: [PATCH] add button to recenter the image on the currently selected group's COM --- tools/lammps-gui/icons/move-recenter.png | Bin 0 -> 3988 bytes tools/lammps-gui/imageviewer.cpp | 25 +++++++++++++++++++++++ tools/lammps-gui/imageviewer.h | 2 ++ tools/lammps-gui/lammpsgui.qrc | 1 + 4 files changed, 28 insertions(+) create mode 100644 tools/lammps-gui/icons/move-recenter.png diff --git a/tools/lammps-gui/icons/move-recenter.png b/tools/lammps-gui/icons/move-recenter.png new file mode 100644 index 0000000000000000000000000000000000000000..6de5429306f0b97052c3101112de8b37208da068 GIT binary patch literal 3988 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 Zo~P=+=el{dw2y)SLp@X73T>y@{{pp4Kkxtm literal 0 HcmV?d00001 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