Bugfixes:

- isosurface works for arrays with shapes > 255
 - Fixed ImageItem exception building histogram when image has only one value
 - Fixed MeshData exception caused when vertexes have no matching faces
 - Fixed GLViewWidget exception handler
This commit is contained in:
Luke Campagnola 2014-02-03 22:24:45 -05:00
parent 83621e816f
commit bccbc29940
5 changed files with 15 additions and 9 deletions

View File

@ -48,6 +48,11 @@ pyqtgraph-0.9.9 [unreleased]
- PlotCurveItem ignores clip-to-view when auto range is enabled - PlotCurveItem ignores clip-to-view when auto range is enabled
- FillBetweenItem now forces PlotCurveItem to generate path - FillBetweenItem now forces PlotCurveItem to generate path
- Fixed import errors and py3 issues in MultiPlotWidget - Fixed import errors and py3 issues in MultiPlotWidget
- Isosurface works for arrays with shapes > 255
- Fixed ImageItem exception building histogram when image has only one value
- Fixed MeshData exception caused when vertexes have no matching faces
- Fixed GLViewWidget exception handler
pyqtgraph-0.9.8 2013-11-24 pyqtgraph-0.9.8 2013-11-24

View File

@ -1790,7 +1790,7 @@ def isosurface(data, level):
[1, 1, 0, 2], [1, 1, 0, 2],
[0, 1, 0, 2], [0, 1, 0, 2],
#[9, 9, 9, 9] ## fake #[9, 9, 9, 9] ## fake
], dtype=np.ubyte) ], dtype=np.uint16) # don't use ubyte here! This value gets added to cell index later; will need the extra precision.
nTableFaces = np.array([len(f)/3 for f in triTable], dtype=np.ubyte) nTableFaces = np.array([len(f)/3 for f in triTable], dtype=np.ubyte)
faceShiftTables = [None] faceShiftTables = [None]
for i in range(1,6): for i in range(1,6):
@ -1889,7 +1889,6 @@ def isosurface(data, level):
#profiler() #profiler()
if cells.shape[0] == 0: if cells.shape[0] == 0:
continue continue
#cellInds = index[(cells*ins[np.newaxis,:]).sum(axis=1)]
cellInds = index[cells[:,0], cells[:,1], cells[:,2]] ## index values of cells to process for this round cellInds = index[cells[:,0], cells[:,1], cells[:,2]] ## index values of cells to process for this round
#profiler() #profiler()
@ -1901,9 +1900,7 @@ def isosurface(data, level):
#profiler() #profiler()
### expensive: ### expensive:
#print verts.shape
verts = (verts * cs[np.newaxis, np.newaxis, :]).sum(axis=2) verts = (verts * cs[np.newaxis, np.newaxis, :]).sum(axis=2)
#vertInds = cutEdges[verts[...,0], verts[...,1], verts[...,2], verts[...,3]] ## and these are the vertex indexes we want.
vertInds = cutEdges[verts] vertInds = cutEdges[verts]
#profiler() #profiler()
nv = vertInds.shape[0] nv = vertInds.shape[0]

View File

@ -322,6 +322,8 @@ class ImageItem(GraphicsObject):
mx = stepData.max() mx = stepData.max()
step = np.ceil((mx-mn) / 500.) step = np.ceil((mx-mn) / 500.)
bins = np.arange(mn, mx+1.01*step, step, dtype=np.int) bins = np.arange(mn, mx+1.01*step, step, dtype=np.int)
if len(bins) == 0:
bins = [mn, mx]
else: else:
bins = 500 bins = 500

View File

@ -180,7 +180,7 @@ class GLViewWidget(QtOpenGL.QGLWidget):
i.paint() i.paint()
except: except:
from .. import debug from .. import debug
pyqtgraph.debug.printExc() debug.printExc()
msg = "Error while drawing item %s." % str(item) msg = "Error while drawing item %s." % str(item)
ver = glGetString(GL_VERSION) ver = glGetString(GL_VERSION)
if ver is not None: if ver is not None:

View File

@ -266,7 +266,11 @@ class MeshData(object):
vertFaces = self.vertexFaces() vertFaces = self.vertexFaces()
self._vertexNormals = np.empty(self._vertexes.shape, dtype=float) self._vertexNormals = np.empty(self._vertexes.shape, dtype=float)
for vindex in xrange(self._vertexes.shape[0]): for vindex in xrange(self._vertexes.shape[0]):
norms = faceNorms[vertFaces[vindex]] ## get all face normals faces = vertFaces[vindex]
if len(faces) == 0:
self._vertexNormals[vindex] = (0,0,0)
continue
norms = faceNorms[faces] ## get all face normals
norm = norms.sum(axis=0) ## sum normals norm = norms.sum(axis=0) ## sum normals
norm /= (norm**2).sum()**0.5 ## and re-normalize norm /= (norm**2).sum()**0.5 ## and re-normalize
self._vertexNormals[vindex] = norm self._vertexNormals[vindex] = norm
@ -403,12 +407,10 @@ class MeshData(object):
Return list mapping each vertex index to a list of face indexes that use the vertex. Return list mapping each vertex index to a list of face indexes that use the vertex.
""" """
if self._vertexFaces is None: if self._vertexFaces is None:
self._vertexFaces = [None] * len(self.vertexes()) self._vertexFaces = [[] for i in xrange(len(self.vertexes()))]
for i in xrange(self._faces.shape[0]): for i in xrange(self._faces.shape[0]):
face = self._faces[i] face = self._faces[i]
for ind in face: for ind in face:
if self._vertexFaces[ind] is None:
self._vertexFaces[ind] = [] ## need a unique/empty list to fill
self._vertexFaces[ind].append(i) self._vertexFaces[ind].append(i)
return self._vertexFaces return self._vertexFaces