diff --git a/GUIs/AmpScanGUI.py b/GUIs/AmpScanGUI.py index deb3020a9cb695fdc7fb6d358727791a3b9b2bc3..1b1087ef4bf7c8e3809b3f8e8304f02e23e96c96 100644 --- a/GUIs/AmpScanGUI.py +++ b/GUIs/AmpScanGUI.py @@ -107,16 +107,19 @@ class AmpScanGUI(QMainWindow): Numpy style docstring. """ - self.alCont = AlignControls(self.filesDrop, self) - self.alCont.show() - self.alCont.centre.clicked.connect(self.centreMesh) - self.alCont.icp.clicked.connect(self.runICP) - 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) + if self.objectsReady(1): + self.alCont = AlignControls(self.filesDrop, self) + self.alCont.show() + self.alCont.centre.clicked.connect(self.centreMesh) + self.alCont.icp.clicked.connect(self.runICP) + 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) + else: + show_message("Must be at least 1 object loaded to run align") def rotatex(self, button): moving = str(self.alCont.moving.currentText()) @@ -178,29 +181,31 @@ class AmpScanGUI(QMainWindow): self.renWin.Render() def runICP(self): - - static = str(self.alCont.static.currentText()) - moving = str(self.alCont.moving.currentText()) - al = align(self.files[moving], self.files[static], - maxiter=10, method='linPoint2Plane').m - al.tform = vtk.vtkTransform() - al.tform.PostMultiply() - al.addActor() - al.actor.SetUserTransform(al.tform) - alName = moving + '_al' - self.files[alName] = al - self.filesDrop.append(alName) - self.fileManager.addRow(alName, self.files[alName]) - self.fileManager.setTable(static, [1,0,0], 0.5, 2) - self.fileManager.setTable(moving, [1,1,1], 1, 0) - self.fileManager.setTable(alName, [0,0,1], 0.5, 2) - if hasattr(self, 'alCont'): - self.alCont.getNames() - if hasattr(self, 'regCont'): - self.regCont.getNames() + if self.objectsReady(1): + static = str(self.alCont.static.currentText()) + moving = str(self.alCont.moving.currentText()) + al = align(self.files[moving], self.files[static], + maxiter=10, method='linPoint2Plane').m + al.tform = vtk.vtkTransform() + al.tform.PostMultiply() + al.addActor() + al.actor.SetUserTransform(al.tform) + alName = moving + '_al' + self.files[alName] = al + self.filesDrop.append(alName) + self.fileManager.addRow(alName, self.files[alName]) + self.fileManager.setTable(static, [1,0,0], 0.5, 2) + self.fileManager.setTable(moving, [1,1,1], 1, 0) + self.fileManager.setTable(alName, [0,0,1], 0.5, 2) + if hasattr(self, 'alCont'): + self.alCont.getNames() + if hasattr(self, 'regCont'): + self.regCont.getNames() + else: + show_message("Must be at least 2 objects loaded to run ICP") def runRegistration(self): - if len(self.files) >= 2: + if self.objectsReady(2): # Needs to be at least 2 files to run registration c1 = [31.0, 73.0, 125.0] c3 = [170.0, 75.0, 65.0] @@ -260,13 +265,15 @@ class AmpScanGUI(QMainWindow): """ FEname = QFileDialog.getOpenFileName(self, 'Open file', filter="FE results (*.npy)") - self.renWin.setnumViewports(1) - self.FE = AmpObject([FEname[0],], stype='FE') - self.AmpObj.lp_smooth() - self.AmpObj.addActor(CMap=self.AmpObj.CMap02P, bands=5) - self.AmpObj.actor.setScalarRange(smin=0.0, smax=50) - self.renWin.renderActors(self.FE.actor, shading=True) - self.renWin.setScalarBar(self.FE.actor) + if FEname[0] != "": # Check that there was a file selected + print(FEname) + self.renWin.setnumViewports(1) + self.FE = AmpObject([FEname[0],], stype='FE') # TODO check this is correct - AmpObject expects dicts or strings + self.AmpObj.lp_smooth() + self.AmpObj.addActor(CMap=self.AmpObj.CMap02P, bands=5) + self.AmpObj.actor.setScalarRange(smin=0.0, smax=50) + self.renWin.renderActors(self.FE.actor, shading=True) + self.renWin.setScalarBar(self.FE.actor) def choosePress(self): """ @@ -275,8 +282,12 @@ class AmpScanGUI(QMainWindow): """ vName = QFileDialog.getOpenFileName(self, 'Open file', filter="Sensor vertices (*.csv)") + if vName[0] == "": # If no file selected, exit + return pName = QFileDialog.getOpenFileName(self, 'Open file', filter="Sensor pressures (*.csv)") + if pName[0] == "": # If no file selected, exit + return self.renWin.setnumViewports(1) self.pSense = pressSense() self.pSense.calcFaces(d=5) @@ -333,6 +344,10 @@ class AmpScanGUI(QMainWindow): self.analyseMenu.addAction(self.analyse) self.kineticMenu = self.menuBar().addMenu("&Kinetic Measurements") self.kineticMenu.addAction(self.openPress) + + def objectsReady(self, num): + return len(self.files) >= num + class fileManager(QMainWindow): """