diff --git a/AmpScan/ampVis.py b/AmpScan/ampVis.py index b921856fdec6b793ac5776d051f8ea54f205c9c9..457f393f5f44339a3404b9e7180b5c0901e1815a 100644 --- a/AmpScan/ampVis.py +++ b/AmpScan/ampVis.py @@ -64,7 +64,7 @@ class vtkRenWin(vtk.vtkRenderWindow): Set the scalar bar within the window based upon a look-up table defined within an actor - Parmeters + Parameters --------- actor: ampActor The actor from which the lut is read from, the actor must have the diff --git a/GUIs/AmpScanGUI.py b/GUIs/AmpScanGUI.py index 0c6d06c798acbfd30a9b459c7d12e4fc4ddffea1..db9610a845798515752084c44bcb40f30859ec6c 100644 --- a/GUIs/AmpScanGUI.py +++ b/GUIs/AmpScanGUI.py @@ -9,10 +9,11 @@ from AmpScan.pressSens import pressSense from PyQt5.QtCore import QPoint, QSize, Qt, QTimer, QRect, pyqtSignal from PyQt5.QtGui import (QColor, QFontMetrics, QImage, QPainter, QIcon, QOpenGLVersionProfile) -from PyQt5.QtWidgets import (QAction, QApplication, QGridLayout, - QMainWindow, QMessageBox, QComboBox, +from PyQt5.QtWidgets import (QAction, QApplication, QGridLayout, QHBoxLayout, + QMainWindow, QMessageBox, QComboBox, QButtonGroup, QOpenGLWidget, QFileDialog,QLabel,QPushButton, - QSlider, QWidget, QTableWidget, QTableWidgetItem) + QSlider, QWidget, QTableWidget, QTableWidgetItem, + QAbstractButton) class AmpScanGUI(QMainWindow): @@ -102,21 +103,61 @@ class AmpScanGUI(QMainWindow): self.alCont = AlignControls(self.filesDrop, self) self.alCont.show() self.alCont.icp.clicked.connect(self.runICP) -# self.renWin.setnumViewports(2) -# self.renWin.setView(view=[-1, 0, 0], viewport=1) -# self.renWin.setProjection(True, 0) -# self.renWin.setProjection(True, 1) -## self.renWin.render(self.AmpObj.actors, dispActors=['limb',]) -## self.renWin.render(self.AmpObj.actors, dispActors=['socket',], -## viewport=1) -# self.renWin.renderActors([self.AmpObj.actor, self.socket.actor], -# viewport=0) -# self.renWin.renderActors([self.AmpObj.actor, self.socket.actor], -# viewport=1) -# self.AmpObj.actor.setColor([1.0, 0.0, 0.0]) -# self.AmpObj.actor.setOpacity(0.5) -# self.socket.actor.setColor([0.0, 0.0, 1.0]) -# self.socket.actor.setOpacity(0.5) + self.alCont.xrotButton.buttonClicked[QAbstractButton].connect(self.rotatex) + self.alCont.yrotButton.buttonClicked[QAbstractButton].connect(self.rotatey) + self.alCont.zrotButton.buttonClicked[QAbstractButton].connect(self.rotatez) + self.alCont.xtraButton.buttonClicked[QAbstractButton].connect(self.transx) + self.alCont.ytraButton.buttonClicked[QAbstractButton].connect(self.transy) + self.alCont.ztraButton.buttonClicked[QAbstractButton].connect(self.transz) + + def rotatex(self, button): + moving = str(self.alCont.moving.currentText()) + ang = [float(button.text()), 0, 0] + self.files[moving].rotateAng(ang, 'deg') + self.files[moving].actor.setVert(self.files[moving].vert) + self.renWin.Render() +# print('rotate x by %.1f' % ang) + + def rotatey(self, button): + moving = str(self.alCont.moving.currentText()) + ang = [0, float(button.text()), 0] + self.files[moving].rotateAng(ang, 'deg') + self.files[moving].actor.setVert(self.files[moving].vert) + self.renWin.Render() +# print('rotate y by %.1f' % ang) + + def rotatez(self, button): + moving = str(self.alCont.moving.currentText()) + ang = [0, 0, float(button.text())] + self.files[moving].rotateAng(ang, 'deg') + self.files[moving].actor.setVert(self.files[moving].vert) + self.renWin.Render() + + def transx(self, button): + moving = str(self.alCont.moving.currentText()) + ang = [float(button.text()), 0, 0] + self.files[moving].translate(ang) + self.files[moving].actor.setVert(self.files[moving].vert) + self.renWin.Render() +# print('rotate x by %.1f' % ang) + + def transy(self, button): + moving = str(self.alCont.moving.currentText()) + ang = [0, float(button.text()), 0] + self.files[moving].translate(ang) + self.files[moving].actor.setVert(self.files[moving].vert) + self.renWin.Render() +# print('rotate y by %.1f' % ang) + + def transz(self, button): + moving = str(self.alCont.moving.currentText()) + ang = [0, 0, float(button.text())] + self.files[moving].translate(ang) + self.files[moving].actor.setVert(self.files[moving].vert) + self.renWin.Render() +# print('rotate z by %.1f' % ang) +# self.files[moving].rotateAng(ang, 'deg') + def runICP(self): @@ -172,12 +213,7 @@ class AmpScanGUI(QMainWindow): self.regCont.show() self.regCont.reg.clicked.connect(self.runRegistration) -# self.renWin.setnumViewports(1) -# self.renWin.setProjection() -# self.RegObj = registration(self.socket, self.AmpObj) -# self.RegObj.addActor(CMap=self.AmpObj.CMapN2P) -# self.renWin.renderActors([self.RegObj.actor,]) -# self.renWin.setScalarBar(self.RegObj.actor) + def analyse(self): """ @@ -348,6 +384,28 @@ class AlignControls(QMainWindow): self.layout.addWidget(self.static, 0, 1) self.layout.addWidget(self.moving, 1, 1) self.layout.addWidget(self.icp, 2, 0, 1, -1) + rots = ['x', 'y', 'z'] + vals = ['-5', '-0.5', '+0.5', '+5'] + for i, r in enumerate(rots): + setattr(self, r + 'rotBox', QHBoxLayout()) + setattr(self, r + 'rotButton', QButtonGroup()) + lab = QLabel(r + ' rotation') + getattr(self, r + 'rotBox').addWidget(lab) + for v in vals: + button = QPushButton(v) + getattr(self, r + 'rotBox').addWidget(button) + getattr(self, r + 'rotButton').addButton(button) + self.layout.addLayout(getattr(self, r + 'rotBox'), i+3, 0, 1, -1) + for i, r in enumerate(rots): + setattr(self, r + 'traBox', QHBoxLayout()) + setattr(self, r + 'traButton', QButtonGroup()) + lab = QLabel(r + ' translation') + getattr(self, r + 'traBox').addWidget(lab) + for v in vals: + button = QPushButton(v) + getattr(self, r + 'traBox').addWidget(button) + getattr(self, r + 'traButton').addButton(button) + self.layout.addLayout(getattr(self, r + 'traBox'), i+6, 0, 1, -1) self.main.setLayout(self.layout) self.setWindowTitle("Alignment Manager") self.getNames() @@ -388,7 +446,7 @@ class RegistrationControls(QMainWindow): self.layout.addWidget(self.target, 1, 1) self.layout.addWidget(self.reg, 2, 0, 1, -1) self.main.setLayout(self.layout) - self.setWindowTitle("Alignment Manager") + self.setWindowTitle("Registration Manager") self.getNames() def getNames(self): @@ -402,6 +460,7 @@ class RegistrationControls(QMainWindow): if __name__ == "__main__": app = QApplication(sys.argv) +# mainWin = AlignControls(['']) mainWin = AmpScanGUI() mainWin.show() sys.exit(app.exec_()) \ No newline at end of file diff --git a/docs/AmpScanlogo.ico b/docs/AmpScanlogo.ico new file mode 100644 index 0000000000000000000000000000000000000000..0dbfa7fbd29bc1c5e788aa7ad1c011a671f5b886 Binary files /dev/null and b/docs/AmpScanlogo.ico differ diff --git a/docs/conf.py b/docs/conf.py index a3019a430bdf8190e57b533338de44f99d36ec67..681ec118e7d90e8f9424db7fc78ab2af722aa0db 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -21,7 +21,7 @@ sys.path.insert(0, os.path.abspath('.')) # -- Project information ----------------------------------------------------- project = 'AmpScan' -copyright = '2018, Joshua Steer' +copyright = '2018, AmpScan developers' author = 'Oliver Stocks' # The short X.Y version @@ -65,6 +65,8 @@ nbsphinx_kernel_name = 'python3' html_logo = "AmpScanlogosmall.svg" +html_favicon = "AmpScanlogo.ico" + # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] diff --git a/docs/exampleDemos.rst b/docs/exampleDemos.rst index bcc4b4176c6f25cfb47d002749d664b6ec7a6d89..a70f229ddef0eb0b6b09744251fffcb1e640c905 100644 --- a/docs/exampleDemos.rst +++ b/docs/exampleDemos.rst @@ -16,5 +16,4 @@ via ``import AmpScan`` by navigating to the root directory and running examples/TESTnb examples/Workflow1-Importstl examples/Workflow2-ImportTetMesh - examples/Workflow3-AnalyseAmpObject - + examples/WorkFlow3-AnalyseAmpObject diff --git a/docs/examples/WorkFlow3-AnalyseAmpObject.ipynb b/docs/examples/WorkFlow3-AnalyseAmpObject.ipynb index 44fe5de51e0adf46d695cca74befca29b89ff797..8f72989095b9a7c8779b400b4919b68cefdc479c 100644 --- a/docs/examples/WorkFlow3-AnalyseAmpObject.ipynb +++ b/docs/examples/WorkFlow3-AnalyseAmpObject.ipynb @@ -83,9 +83,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python [conda env:python3]", + "display_name": "Python [conda env:py3]", "language": "python", - "name": "conda-env-python3-py" + "name": "conda-env-py3-py" }, "language_info": { "codemirror_mode": { @@ -97,7 +97,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.6.4" + "version": "3.5.5" } }, "nbformat": 4,