Added GLBarGraphItem example
GLMeshItem accepts ShaderProgram or name of predefined program Added missing documentation to GLGraphicsItem minor edits
This commit is contained in:
parent
91aa2f1c16
commit
f997b3079b
47
examples/GLBarGraphItem.py
Normal file
47
examples/GLBarGraphItem.py
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
"""
|
||||||
|
Demonstrate use of GLLinePlotItem to draw cross-sections of a surface.
|
||||||
|
|
||||||
|
"""
|
||||||
|
## Add path to library (just for examples; you do not need this)
|
||||||
|
import initExample
|
||||||
|
|
||||||
|
from pyqtgraph.Qt import QtCore, QtGui
|
||||||
|
import pyqtgraph.opengl as gl
|
||||||
|
import pyqtgraph as pg
|
||||||
|
import numpy as np
|
||||||
|
|
||||||
|
app = QtGui.QApplication([])
|
||||||
|
w = gl.GLViewWidget()
|
||||||
|
w.opts['distance'] = 40
|
||||||
|
w.show()
|
||||||
|
w.setWindowTitle('pyqtgraph example: GLBarGraphItem')
|
||||||
|
|
||||||
|
gx = gl.GLGridItem()
|
||||||
|
gx.rotate(90, 0, 1, 0)
|
||||||
|
gx.translate(-10, 0, 10)
|
||||||
|
w.addItem(gx)
|
||||||
|
gy = gl.GLGridItem()
|
||||||
|
gy.rotate(90, 1, 0, 0)
|
||||||
|
gy.translate(0, -10, 10)
|
||||||
|
w.addItem(gy)
|
||||||
|
gz = gl.GLGridItem()
|
||||||
|
gz.translate(0, 0, 0)
|
||||||
|
w.addItem(gz)
|
||||||
|
|
||||||
|
# regular grid of starting positions
|
||||||
|
pos = np.mgrid[0:10, 0:10, 0:1].reshape(3,10,10).transpose(1,2,0)
|
||||||
|
# fixed widths, random heights
|
||||||
|
size = np.empty((10,10,3))
|
||||||
|
size[...,0:2] = 0.4
|
||||||
|
size[...,2] = np.random.normal(size=(10,10))
|
||||||
|
|
||||||
|
bg = gl.GLBarGraphItem(pos, size)
|
||||||
|
w.addItem(bg)
|
||||||
|
|
||||||
|
|
||||||
|
## Start Qt event loop unless running in interactive mode.
|
||||||
|
if __name__ == '__main__':
|
||||||
|
import sys
|
||||||
|
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
|
||||||
|
QtGui.QApplication.instance().exec_()
|
@ -15,6 +15,7 @@ class PlotData(object):
|
|||||||
- removal of nan/inf values
|
- removal of nan/inf values
|
||||||
- option for single value shared by entire column
|
- option for single value shared by entire column
|
||||||
- cached downsampling
|
- cached downsampling
|
||||||
|
- cached min / max / hasnan / isuniform
|
||||||
"""
|
"""
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self.fields = {}
|
self.fields = {}
|
||||||
|
@ -205,7 +205,11 @@ class RemoteEventHandler(object):
|
|||||||
fnkwds[k] = np.fromstring(byteData[ind], dtype=dtype).reshape(shape)
|
fnkwds[k] = np.fromstring(byteData[ind], dtype=dtype).reshape(shape)
|
||||||
|
|
||||||
if len(fnkwds) == 0: ## need to do this because some functions do not allow keyword arguments.
|
if len(fnkwds) == 0: ## need to do this because some functions do not allow keyword arguments.
|
||||||
result = obj(*fnargs)
|
try:
|
||||||
|
result = obj(*fnargs)
|
||||||
|
except:
|
||||||
|
print("Failed to call object %s: %d, %s" % (obj, len(fnargs), fnargs[1:]))
|
||||||
|
raise
|
||||||
else:
|
else:
|
||||||
result = obj(*fnargs, **fnkwds)
|
result = obj(*fnargs, **fnkwds)
|
||||||
|
|
||||||
|
@ -40,6 +40,7 @@ class GLGraphicsItem(QtCore.QObject):
|
|||||||
self.__glOpts = {}
|
self.__glOpts = {}
|
||||||
|
|
||||||
def setParentItem(self, item):
|
def setParentItem(self, item):
|
||||||
|
"""Set this item's parent in the scenegraph hierarchy."""
|
||||||
if self.__parent is not None:
|
if self.__parent is not None:
|
||||||
self.__parent.__children.remove(self)
|
self.__parent.__children.remove(self)
|
||||||
if item is not None:
|
if item is not None:
|
||||||
@ -98,9 +99,11 @@ class GLGraphicsItem(QtCore.QObject):
|
|||||||
|
|
||||||
|
|
||||||
def parentItem(self):
|
def parentItem(self):
|
||||||
|
"""Return a this item's parent in the scenegraph hierarchy."""
|
||||||
return self.__parent
|
return self.__parent
|
||||||
|
|
||||||
def childItems(self):
|
def childItems(self):
|
||||||
|
"""Return a list of this item's children in the scenegraph hierarchy."""
|
||||||
return list(self.__children)
|
return list(self.__children)
|
||||||
|
|
||||||
def _setView(self, v):
|
def _setView(self, v):
|
||||||
@ -124,10 +127,15 @@ class GLGraphicsItem(QtCore.QObject):
|
|||||||
return self.__depthValue
|
return self.__depthValue
|
||||||
|
|
||||||
def setTransform(self, tr):
|
def setTransform(self, tr):
|
||||||
|
"""Set the local transform for this object.
|
||||||
|
Must be a :class:`Transform3D <pyqtgraph.Transform3D>` instance. This transform
|
||||||
|
determines how the local coordinate system of the item is mapped to the coordinate
|
||||||
|
system of its parent."""
|
||||||
self.__transform = Transform3D(tr)
|
self.__transform = Transform3D(tr)
|
||||||
self.update()
|
self.update()
|
||||||
|
|
||||||
def resetTransform(self):
|
def resetTransform(self):
|
||||||
|
"""Reset this item's transform to an identity transformation."""
|
||||||
self.__transform.setToIdentity()
|
self.__transform.setToIdentity()
|
||||||
self.update()
|
self.update()
|
||||||
|
|
||||||
@ -148,9 +156,12 @@ class GLGraphicsItem(QtCore.QObject):
|
|||||||
self.setTransform(tr * self.transform())
|
self.setTransform(tr * self.transform())
|
||||||
|
|
||||||
def transform(self):
|
def transform(self):
|
||||||
|
"""Return this item's transform object."""
|
||||||
return self.__transform
|
return self.__transform
|
||||||
|
|
||||||
def viewTransform(self):
|
def viewTransform(self):
|
||||||
|
"""Return the transform mapping this item's local coordinate system to the
|
||||||
|
view coordinate system."""
|
||||||
tr = self.__transform
|
tr = self.__transform
|
||||||
p = self
|
p = self
|
||||||
while True:
|
while True:
|
||||||
@ -190,16 +201,24 @@ class GLGraphicsItem(QtCore.QObject):
|
|||||||
|
|
||||||
|
|
||||||
def hide(self):
|
def hide(self):
|
||||||
|
"""Hide this item.
|
||||||
|
This is equivalent to setVisible(False)."""
|
||||||
self.setVisible(False)
|
self.setVisible(False)
|
||||||
|
|
||||||
def show(self):
|
def show(self):
|
||||||
|
"""Make this item visible if it was previously hidden.
|
||||||
|
This is equivalent to setVisible(True)."""
|
||||||
self.setVisible(True)
|
self.setVisible(True)
|
||||||
|
|
||||||
def setVisible(self, vis):
|
def setVisible(self, vis):
|
||||||
|
"""Set the visibility of this item."""
|
||||||
self.__visible = vis
|
self.__visible = vis
|
||||||
self.update()
|
self.update()
|
||||||
|
|
||||||
def visible(self):
|
def visible(self):
|
||||||
|
"""Return True if the item is currently set to be visible.
|
||||||
|
Note that this does not guarantee that the item actually appears in the
|
||||||
|
view, as it may be obscured or outside of the current view area."""
|
||||||
return self.__visible
|
return self.__visible
|
||||||
|
|
||||||
|
|
||||||
@ -237,6 +256,10 @@ class GLGraphicsItem(QtCore.QObject):
|
|||||||
self.setupGLState()
|
self.setupGLState()
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
|
"""
|
||||||
|
Indicates that this item needs to be redrawn, and schedules an update
|
||||||
|
with the view it is displayed in.
|
||||||
|
"""
|
||||||
v = self.view()
|
v = self.view()
|
||||||
if v is None:
|
if v is None:
|
||||||
return
|
return
|
||||||
|
@ -247,9 +247,9 @@ class MeshData(object):
|
|||||||
return self._faceNormals
|
return self._faceNormals
|
||||||
elif indexed == 'faces':
|
elif indexed == 'faces':
|
||||||
if self._faceNormalsIndexedByFaces is None:
|
if self._faceNormalsIndexedByFaces is None:
|
||||||
norms = np.empty((self._faceNormals.shape[0], 3, 3))
|
norms = np.empty((self._faceNormals.shape[0], 3, 3))
|
||||||
norms[:] = self._faceNormals[:,np.newaxis,:]
|
norms[:] = self._faceNormals[:,np.newaxis,:]
|
||||||
self._faceNormalsIndexedByFaces = norms
|
self._faceNormalsIndexedByFaces = norms
|
||||||
return self._faceNormalsIndexedByFaces
|
return self._faceNormalsIndexedByFaces
|
||||||
else:
|
else:
|
||||||
raise Exception("Invalid indexing mode. Accepts: None, 'faces'")
|
raise Exception("Invalid indexing mode. Accepts: None, 'faces'")
|
||||||
|
@ -69,7 +69,11 @@ class GLMeshItem(GLGraphicsItem):
|
|||||||
self.update()
|
self.update()
|
||||||
|
|
||||||
def shader(self):
|
def shader(self):
|
||||||
return shaders.getShaderProgram(self.opts['shader'])
|
shader = self.opts['shader']
|
||||||
|
if isinstance(shader, shaders.ShaderProgram):
|
||||||
|
return shader
|
||||||
|
else:
|
||||||
|
return shaders.getShaderProgram(shader)
|
||||||
|
|
||||||
def setColor(self, c):
|
def setColor(self, c):
|
||||||
"""Set the default color to use when no vertex or face colors are specified."""
|
"""Set the default color to use when no vertex or face colors are specified."""
|
||||||
|
Loading…
Reference in New Issue
Block a user