diff --git a/AmpScan/AmpScanGUI.py b/AmpScan/AmpScanGUI.py index ee983356fd90d1d7d964942f44beb49dfcb0a11c..3035f0747c3cb311b7d5e41447d60d060e940af0 100644 --- a/AmpScan/AmpScanGUI.py +++ b/AmpScan/AmpScanGUI.py @@ -1,5 +1,6 @@ import sys import numpy as np +from vtk.util import numpy_support from .core import AmpObject from .registration import registration from .ampVis import qtVtkWindow @@ -79,18 +80,22 @@ class AmpScanGUI(QMainWindow): self.renWin.setScalarBar(self.RegObj.actor) def analyse(self): - self.RegObj.plot_slices() + #self.RegObj.plot_slices() + self.AmpObj.rotate([50, 50, 10], ang='deg') + self.vtkWidget.render() + #self.AmpObj.vert[0,0] = 1 + #self.AmpObj._v = numpy_support.numpy_to_vtk(self.AmpObj.vert) def chooseFE(self): FEname = QFileDialog.getOpenFileName(self, 'Open file', filter="FE results (*.npy)") self.renWin.setnumViewports(1) - self.AmpObj.addFE([FEname[0],]) - self.AmpObj.lp_smooth('FE', n=1) - self.AmpObj.addActor(stype='FE', CMap=self.AmpObj.CMap02P, bands=5) - self.AmpObj.actors['FE'].setScalarRange(smin=0.0, smax=50) - self.renWin.renderActors(self.AmpObj.actors, ['FE',], shading=True) - self.renWin.setScalarBar(self.AmpObj.actors['FE']) + 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) def choosePress(self): vName = QFileDialog.getOpenFileName(self, 'Open file', diff --git a/AmpScan/ampVis.py b/AmpScan/ampVis.py index 0cada59e539cab9dd5870e5f2005ff5c8302d936..8879efda5e91104b7bde964d043d2796d22098c0 100644 --- a/AmpScan/ampVis.py +++ b/AmpScan/ampVis.py @@ -233,14 +233,16 @@ class visMixin(object): """ self.actor = self.ampActor() + #self._v = numpy_support.numpy_to_vtk(self.vert, deep=0) self.actor.setVert(self.vert) self.actor.setFaces(self.faces) + #self.actor.setNorm() 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.actor.lut) - self.actor.setNorm() + class ampActor(vtk.vtkActor): """ @@ -253,7 +255,6 @@ class visMixin(object): self.mesh = vtk.vtkPolyData() self.points = vtk.vtkPoints() self.polys = vtk.vtkCellArray() - self.norm = vtk.vtkPolyDataNormals() self.Mapper = vtk.vtkPolyDataMapper() #self.setVert(data['vert']) #self.setFaces(data['faces']) @@ -272,6 +273,7 @@ class visMixin(object): def setVert(self, vert, deep=0): self._v = numpy_support.numpy_to_vtk(vert, deep=deep) self.points.SetData(self._v) +# self.points.SetData(vert) self.mesh.SetPoints(self.points) def setFaces(self, faces, deep=0): @@ -281,14 +283,21 @@ class visMixin(object): self.polys.SetCells(len(faces), self._f) self.mesh.SetPolys(self.polys) - def setNorm(self, split=False): + def setNorm(self, split=False, norm=None, deep=0): """ 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()) + if norm is not None: + self._n = numpy_support.numpy_to_vtk(norm, deep=deep) + self.mesh.GetPointData().SetNormals(self._n) + else: + self.norm = vtk.vtkPolyDataNormals() + self.norm.ComputePointNormalsOn() + self.norm.ComputeCellNormalsOff() + self.norm.SetFeatureAngle(30.0) + self.norm.SetInputData(self.mesh) + self.norm.Update() + self.mesh.DeepCopy(self.norm.GetOutput()) self.GetProperty().SetInterpolationToGouraud() def setValues(self, values, deep=0): diff --git a/AmpScan/core.py b/AmpScan/core.py index 72b9c312e22342a6b4d039bfaf2921a3884da8d9..517a9c5c42f1ec283dec7cee5b6f070bc8c0f99f 100644 --- a/AmpScan/core.py +++ b/AmpScan/core.py @@ -116,7 +116,7 @@ class AmpObject(trimMixin, smoothMixin, analyseMixin, self.calcStruct() def calcStruct(self, norm=True, edges=True, - edgeFaces=True, faceEdges=True, vNorm=True): + edgeFaces=True, faceEdges=True, vNorm=False): if norm is True: self.calcNorm() if edges is True: @@ -196,6 +196,7 @@ class AmpObject(trimMixin, smoothMixin, analyseMixin, def calcVNorm(self): """ Function to compute the vertex normals + Not required for the AmpActor but may be needed for ICP """ f = self.faces.flatten() o_idx = f.argsort() @@ -242,7 +243,7 @@ class AmpObject(trimMixin, smoothMixin, analyseMixin, trans: array-like 1x3 array of the tranlation in [x, y, z] """ - self.vert += trans + self.vert[:] += trans def centre(self): """ @@ -250,9 +251,9 @@ class AmpObject(trimMixin, smoothMixin, analyseMixin, """ self.translate(-self.vert.mean(axis=0)) - def rotate(self, rot): - R = rotMatrix(rot) - self.vert = np.dot(self.vert, np.transpose(R)) + def rotate(self, rot, ang='rad'): + R = rotMatrix(rot, ang) + self.vert[:, :] = np.dot(self.vert, np.transpose(R)) def man_rot(self, rot): """ diff --git a/AmpScan/smooth.py b/AmpScan/smooth.py index d80bf9d5d76790e706ec04936233368719f22e0f..f8b8ea6c46505bdfcfbb7d051ddc5fa0aa47bbd5 100644 --- a/AmpScan/smooth.py +++ b/AmpScan/smooth.py @@ -38,6 +38,6 @@ class smoothMixin(object): # Get average of each array vert = [vert.mean(axis=0) for vert in spl] # Write to the AmpObj - self.vert = np.array(vert) + self.vert[:, :] = np.array(vert) \ No newline at end of file