mirror of
https://github.com/Athemis/PyDSF.git
synced 2025-04-29 15:09:12 +00:00
Add pyqtgraph as submodule
This commit is contained in:
parent
f4c540a439
commit
ddb8394091
240 changed files with 50958 additions and 0 deletions
99
pyqtgraph/opengl/items/GLImageItem.py
Normal file
99
pyqtgraph/opengl/items/GLImageItem.py
Normal file
|
@ -0,0 +1,99 @@
|
|||
from OpenGL.GL import *
|
||||
from .. GLGraphicsItem import GLGraphicsItem
|
||||
from ...Qt import QtGui
|
||||
import numpy as np
|
||||
|
||||
__all__ = ['GLImageItem']
|
||||
|
||||
class GLImageItem(GLGraphicsItem):
|
||||
"""
|
||||
**Bases:** :class:`GLGraphicsItem <pyqtgraph.opengl.GLGraphicsItem>`
|
||||
|
||||
Displays image data as a textured quad.
|
||||
"""
|
||||
|
||||
|
||||
def __init__(self, data, smooth=False, glOptions='translucent'):
|
||||
"""
|
||||
|
||||
============== =======================================================================================
|
||||
**Arguments:**
|
||||
data Volume data to be rendered. *Must* be 3D numpy array (x, y, RGBA) with dtype=ubyte.
|
||||
(See functions.makeRGBA)
|
||||
smooth (bool) If True, the volume slices are rendered with linear interpolation
|
||||
============== =======================================================================================
|
||||
"""
|
||||
|
||||
self.smooth = smooth
|
||||
self._needUpdate = False
|
||||
GLGraphicsItem.__init__(self)
|
||||
self.setData(data)
|
||||
self.setGLOptions(glOptions)
|
||||
|
||||
def initializeGL(self):
|
||||
glEnable(GL_TEXTURE_2D)
|
||||
self.texture = glGenTextures(1)
|
||||
|
||||
def setData(self, data):
|
||||
self.data = data
|
||||
self._needUpdate = True
|
||||
self.update()
|
||||
|
||||
def _updateTexture(self):
|
||||
glBindTexture(GL_TEXTURE_2D, self.texture)
|
||||
if self.smooth:
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR)
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR)
|
||||
else:
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER)
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER)
|
||||
#glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_BORDER)
|
||||
shape = self.data.shape
|
||||
|
||||
## Test texture dimensions first
|
||||
glTexImage2D(GL_PROXY_TEXTURE_2D, 0, GL_RGBA, shape[0], shape[1], 0, GL_RGBA, GL_UNSIGNED_BYTE, None)
|
||||
if glGetTexLevelParameteriv(GL_PROXY_TEXTURE_2D, 0, GL_TEXTURE_WIDTH) == 0:
|
||||
raise Exception("OpenGL failed to create 2D texture (%dx%d); too large for this hardware." % shape[:2])
|
||||
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, shape[0], shape[1], 0, GL_RGBA, GL_UNSIGNED_BYTE, self.data.transpose((1,0,2)))
|
||||
glDisable(GL_TEXTURE_2D)
|
||||
|
||||
#self.lists = {}
|
||||
#for ax in [0,1,2]:
|
||||
#for d in [-1, 1]:
|
||||
#l = glGenLists(1)
|
||||
#self.lists[(ax,d)] = l
|
||||
#glNewList(l, GL_COMPILE)
|
||||
#self.drawVolume(ax, d)
|
||||
#glEndList()
|
||||
|
||||
|
||||
def paint(self):
|
||||
if self._needUpdate:
|
||||
self._updateTexture()
|
||||
glEnable(GL_TEXTURE_2D)
|
||||
glBindTexture(GL_TEXTURE_2D, self.texture)
|
||||
|
||||
self.setupGLState()
|
||||
|
||||
#glEnable(GL_DEPTH_TEST)
|
||||
##glDisable(GL_CULL_FACE)
|
||||
#glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
|
||||
#glEnable( GL_BLEND )
|
||||
#glEnable( GL_ALPHA_TEST )
|
||||
glColor4f(1,1,1,1)
|
||||
|
||||
glBegin(GL_QUADS)
|
||||
glTexCoord2f(0,0)
|
||||
glVertex3f(0,0,0)
|
||||
glTexCoord2f(1,0)
|
||||
glVertex3f(self.data.shape[0], 0, 0)
|
||||
glTexCoord2f(1,1)
|
||||
glVertex3f(self.data.shape[0], self.data.shape[1], 0)
|
||||
glTexCoord2f(0,1)
|
||||
glVertex3f(0, self.data.shape[1], 0)
|
||||
glEnd()
|
||||
glDisable(GL_TEXTURE_3D)
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue