diff --git a/AmpScan/AmpScanGUI.py b/AmpScan/AmpScanGUI.py index d010817f67daec479f7d2bdfec27f19903d97995..5f31c9518650bbbdae5a4f31789a58c6b1123115 100644 --- a/AmpScan/AmpScanGUI.py +++ b/AmpScan/AmpScanGUI.py @@ -37,13 +37,13 @@ class AmpScanGUI(QMainWindow): self.fname = QFileDialog.getOpenFileName(self, 'Open file', filter="Meshes (*.stl)") if self.AmpObj is not None: - self.renWin.renderActors(self.AmpObj.actors, []) + self.renWin.renderActors([self.AmpObj.actor,]) self.AmpObj = AmpObject(self.fname[0], 'limb') - self.AmpObj.addActor(stype='limb') - self.AmpObj.lp_smooth(stype='limb') + self.AmpObj.addActor() + self.AmpObj.lp_smooth() self.renWin.setnumViewports(1) self.renWin.setProjection() - self.renWin.renderActors(self.AmpObj.actors, ['limb',]) + self.renWin.renderActors([self.AmpObj.actor,]) def chooseSocket(self): self.sockfname = QFileDialog.getOpenFileName(self, 'Open file', @@ -148,8 +148,8 @@ class AmpScanGUI(QMainWindow): self.kineticMenu = self.menuBar().addMenu("&Kinetic Measurements") self.kineticMenu.addAction(self.openPress) -if __name__ == "__main__": - app = QApplication(sys.argv) - mainWin = AmpScanGUI() - mainWin.show() - sys.exit(app.exec_()) \ No newline at end of file +#if __name__ == "__main__": +# app = QApplication(sys.argv) +# mainWin = AmpScanGUI() +# mainWin.show() +# sys.exit(app.exec_()) \ No newline at end of file diff --git a/AmpScan/ampVis.py b/AmpScan/ampVis.py index 1d95933a0a153fa9f955f10eee3ab11ef68fe9d4..4f1e58123f4a35c7ac0db4b612478097ef940527 100644 --- a/AmpScan/ampVis.py +++ b/AmpScan/ampVis.py @@ -226,13 +226,21 @@ class visMixin(object): win.Render() - def addActor(self, CMap=None, bands=128): + def addActor(self, CMap=None, bands=128, sRange=[0,8]): """ Function to insert a vtk actor into the actors dictionary within the AmpObject """ - self.actor = self.ampActor(data, CMap=CMap, bands=bands) + self.actor = self.ampActor() + self.actor.setVert(self.vert) + self.actor.setFaces(self.faces) + if self.values is not None: + self.actor.setValues(self.values) + self.actor.setCMap(CMap, bands) + self.actor.setScalarRange(sRange) + self.actor.Mapper.SetLookupTable(self.lut) + self.actor.setNorm() class ampActor(vtk.vtkActor): """ @@ -241,47 +249,51 @@ class visMixin(object): from numpy arrays """ - def __init__(self, data, CMap=None, bands=128): + def __init__(self, CMap=None, bands=128): self.mesh = vtk.vtkPolyData() self.points = vtk.vtkPoints() self.polys = vtk.vtkCellArray() - self.setVert(data['vert']) - self.setFaces(data['faces']) - self.setNorm() - if CMap is not None: - self.setRect(data['values']) - self.setCMap(CMap, bands) + self.norm = vtk.vtkPolyDataNormals() self.Mapper = vtk.vtkPolyDataMapper() + #self.setVert(data['vert']) + #self.setFaces(data['faces']) + #self.setNorm() + #if CMap is not None: + # self.setRect(data['values']) + # self.setCMap(CMap, bands) self.Mapper.InterpolateScalarsBeforeMappingOn() self.Mapper.SetInputData(self.mesh) - if CMap is not None: - self.setScalarRange() - self.Mapper.SetLookupTable(self.lut) + #if CMap is not None: + # self.setScalarRange() + # self.Mapper.SetLookupTable(self.lut) self.SetMapper(self.Mapper) - def setVert(self, vert): - self.points.SetData(numpy_support.numpy_to_vtk(vert, deep=1)) + def setVert(self, vert, deep=0): + self._v = numpy_support.numpy_to_vtk(vert, deep=deep) + self.points.SetData(self._v) self.mesh.SetPoints(self.points) - def setFaces(self, faces): - f = np.c_[np.tile(faces.shape[1], faces.shape[0]), - faces].flatten().astype(np.int64) - self.polys.SetCells(len(faces), - numpy_support.numpy_to_vtkIdTypeArray(f, deep=1)) + def setFaces(self, faces, deep=0): + self._faces = np.c_[np.tile(faces.shape[1], faces.shape[0]), + faces].flatten().astype(np.int64) + self._f = numpy_support.numpy_to_vtkIdTypeArray(self._faces, deep=deep) + self.polys.SetCells(len(faces), self._f) self.mesh.SetPolys(self.polys) def setNorm(self, split=False): - self.norm = vtk.vtkPolyDataNormals() + """ + Check if deepcopy is neededin this function + """ self.norm.SetInputData(self.mesh) self.norm.SetFeatureAngle(30.0) self.norm.Update() self.mesh.DeepCopy(self.norm.GetOutput()) self.GetProperty().SetInterpolationToGouraud() - def setRect(self, rect): - self.scalars = numpy_support.numpy_to_vtk(rect, deep=1) - self.mesh.GetPointData().SetScalars(self.scalars) + def setValues(self, values, deep=0): + self._values = numpy_support.numpy_to_vtk(values, deep=0) + self.mesh.GetPointData().SetScalars(self._values) def setOpacity(self, opacity=1.0): self.GetProperty().SetOpacity(opacity) @@ -289,8 +301,8 @@ class visMixin(object): def setColor(self, color=[1.0, 1.0, 1.0]): self.GetProperty().SetColor(color) - def setScalarRange(self, smin=-8.0, smax=8.0): - self.Mapper.SetScalarRange(smin, smax) + def setScalarRange(self, sRange): + self.Mapper.SetScalarRange(sRange[0], sRange[1]) def setCMap(self, CMap, bands=128): diff --git a/AmpScan/core.py b/AmpScan/core.py index 2418beae95cc1d1dc0be374672855f487923822d..3b3620cfa076375600d944e5d348fb09cee4fc6e 100644 --- a/AmpScan/core.py +++ b/AmpScan/core.py @@ -54,6 +54,7 @@ class AmpObject(trimMixin, smoothMixin, analyseMixin, self.CMapN2P = np.transpose(CMap)/255.0 self.CMap02P = np.flip(np.transpose(CMap1)/255.0, axis=0) self.stype = stype + self.values = None if stype is 'FE': self.addFE([Data,]) else: diff --git a/AmpScan/runAmpScanGUI.py b/AmpScan/runAmpScanGUI.py new file mode 100644 index 0000000000000000000000000000000000000000..70fad540eacad8e1934c772d5b916f961945de4b --- /dev/null +++ b/AmpScan/runAmpScanGUI.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- +""" +Created on Wed May 2 20:21:07 2018 + +@author: Josh +""" + +import AmpScan as ampS +from PyQt5.QtWidgets import QApplication +import sys +if __name__ == "__main__": + app = QApplication(sys.argv) + mainWin = ampS.AmpScanGUI() + mainWin.show() + sys.exit(app.exec_()) \ No newline at end of file