Skip to content
Snippets Groups Projects
Commit 3a85bbc2 authored by Joshua Steer's avatar Joshua Steer
Browse files

Modified AmpObject so any changes to arrays continue to ampActor

parent 57b90d01
No related branches found
No related tags found
No related merge requests found
import sys import sys
import numpy as np import numpy as np
from vtk.util import numpy_support
from .core import AmpObject from .core import AmpObject
from .registration import registration from .registration import registration
from .ampVis import qtVtkWindow from .ampVis import qtVtkWindow
...@@ -79,18 +80,22 @@ class AmpScanGUI(QMainWindow): ...@@ -79,18 +80,22 @@ class AmpScanGUI(QMainWindow):
self.renWin.setScalarBar(self.RegObj.actor) self.renWin.setScalarBar(self.RegObj.actor)
def analyse(self): 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): def chooseFE(self):
FEname = QFileDialog.getOpenFileName(self, 'Open file', FEname = QFileDialog.getOpenFileName(self, 'Open file',
filter="FE results (*.npy)") filter="FE results (*.npy)")
self.renWin.setnumViewports(1) self.renWin.setnumViewports(1)
self.AmpObj.addFE([FEname[0],]) self.FE = AmpObject([FEname[0],], stype='FE')
self.AmpObj.lp_smooth('FE', n=1) self.AmpObj.lp_smooth()
self.AmpObj.addActor(stype='FE', CMap=self.AmpObj.CMap02P, bands=5) self.AmpObj.addActor(CMap=self.AmpObj.CMap02P, bands=5)
self.AmpObj.actors['FE'].setScalarRange(smin=0.0, smax=50) self.AmpObj.actor.setScalarRange(smin=0.0, smax=50)
self.renWin.renderActors(self.AmpObj.actors, ['FE',], shading=True) self.renWin.renderActors(self.FE.actor, shading=True)
self.renWin.setScalarBar(self.AmpObj.actors['FE']) self.renWin.setScalarBar(self.FE.actor)
def choosePress(self): def choosePress(self):
vName = QFileDialog.getOpenFileName(self, 'Open file', vName = QFileDialog.getOpenFileName(self, 'Open file',
......
...@@ -233,14 +233,16 @@ class visMixin(object): ...@@ -233,14 +233,16 @@ class visMixin(object):
""" """
self.actor = self.ampActor() self.actor = self.ampActor()
#self._v = numpy_support.numpy_to_vtk(self.vert, deep=0)
self.actor.setVert(self.vert) self.actor.setVert(self.vert)
self.actor.setFaces(self.faces) self.actor.setFaces(self.faces)
#self.actor.setNorm()
if self.values is not None: if self.values is not None:
self.actor.setValues(self.values) self.actor.setValues(self.values)
self.actor.setCMap(CMap, bands) self.actor.setCMap(CMap, bands)
self.actor.setScalarRange(sRange) self.actor.setScalarRange(sRange)
self.actor.Mapper.SetLookupTable(self.actor.lut) self.actor.Mapper.SetLookupTable(self.actor.lut)
self.actor.setNorm()
class ampActor(vtk.vtkActor): class ampActor(vtk.vtkActor):
""" """
...@@ -253,7 +255,6 @@ class visMixin(object): ...@@ -253,7 +255,6 @@ class visMixin(object):
self.mesh = vtk.vtkPolyData() self.mesh = vtk.vtkPolyData()
self.points = vtk.vtkPoints() self.points = vtk.vtkPoints()
self.polys = vtk.vtkCellArray() self.polys = vtk.vtkCellArray()
self.norm = vtk.vtkPolyDataNormals()
self.Mapper = vtk.vtkPolyDataMapper() self.Mapper = vtk.vtkPolyDataMapper()
#self.setVert(data['vert']) #self.setVert(data['vert'])
#self.setFaces(data['faces']) #self.setFaces(data['faces'])
...@@ -272,6 +273,7 @@ class visMixin(object): ...@@ -272,6 +273,7 @@ class visMixin(object):
def setVert(self, vert, deep=0): def setVert(self, vert, deep=0):
self._v = numpy_support.numpy_to_vtk(vert, deep=deep) self._v = numpy_support.numpy_to_vtk(vert, deep=deep)
self.points.SetData(self._v) self.points.SetData(self._v)
# self.points.SetData(vert)
self.mesh.SetPoints(self.points) self.mesh.SetPoints(self.points)
def setFaces(self, faces, deep=0): def setFaces(self, faces, deep=0):
...@@ -281,12 +283,19 @@ class visMixin(object): ...@@ -281,12 +283,19 @@ class visMixin(object):
self.polys.SetCells(len(faces), self._f) self.polys.SetCells(len(faces), self._f)
self.mesh.SetPolys(self.polys) 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 Check if deepcopy is neededin this function
""" """
self.norm.SetInputData(self.mesh) 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.SetFeatureAngle(30.0)
self.norm.SetInputData(self.mesh)
self.norm.Update() self.norm.Update()
self.mesh.DeepCopy(self.norm.GetOutput()) self.mesh.DeepCopy(self.norm.GetOutput())
self.GetProperty().SetInterpolationToGouraud() self.GetProperty().SetInterpolationToGouraud()
......
...@@ -116,7 +116,7 @@ class AmpObject(trimMixin, smoothMixin, analyseMixin, ...@@ -116,7 +116,7 @@ class AmpObject(trimMixin, smoothMixin, analyseMixin,
self.calcStruct() self.calcStruct()
def calcStruct(self, norm=True, edges=True, def calcStruct(self, norm=True, edges=True,
edgeFaces=True, faceEdges=True, vNorm=True): edgeFaces=True, faceEdges=True, vNorm=False):
if norm is True: if norm is True:
self.calcNorm() self.calcNorm()
if edges is True: if edges is True:
...@@ -196,6 +196,7 @@ class AmpObject(trimMixin, smoothMixin, analyseMixin, ...@@ -196,6 +196,7 @@ class AmpObject(trimMixin, smoothMixin, analyseMixin,
def calcVNorm(self): def calcVNorm(self):
""" """
Function to compute the vertex normals Function to compute the vertex normals
Not required for the AmpActor but may be needed for ICP
""" """
f = self.faces.flatten() f = self.faces.flatten()
o_idx = f.argsort() o_idx = f.argsort()
...@@ -242,7 +243,7 @@ class AmpObject(trimMixin, smoothMixin, analyseMixin, ...@@ -242,7 +243,7 @@ class AmpObject(trimMixin, smoothMixin, analyseMixin,
trans: array-like trans: array-like
1x3 array of the tranlation in [x, y, z] 1x3 array of the tranlation in [x, y, z]
""" """
self.vert += trans self.vert[:] += trans
def centre(self): def centre(self):
""" """
...@@ -250,9 +251,9 @@ class AmpObject(trimMixin, smoothMixin, analyseMixin, ...@@ -250,9 +251,9 @@ class AmpObject(trimMixin, smoothMixin, analyseMixin,
""" """
self.translate(-self.vert.mean(axis=0)) self.translate(-self.vert.mean(axis=0))
def rotate(self, rot): def rotate(self, rot, ang='rad'):
R = rotMatrix(rot) R = rotMatrix(rot, ang)
self.vert = np.dot(self.vert, np.transpose(R)) self.vert[:, :] = np.dot(self.vert, np.transpose(R))
def man_rot(self, rot): def man_rot(self, rot):
""" """
......
...@@ -38,6 +38,6 @@ class smoothMixin(object): ...@@ -38,6 +38,6 @@ class smoothMixin(object):
# Get average of each array # Get average of each array
vert = [vert.mean(axis=0) for vert in spl] vert = [vert.mean(axis=0) for vert in spl]
# Write to the AmpObj # Write to the AmpObj
self.vert = np.array(vert) self.vert[:, :] = np.array(vert)
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment