From 9a8e2915b54fe83706450fc638f288e03c08699d Mon Sep 17 00:00:00 2001 From: David Rose Date: Mon, 9 Feb 2009 20:18:07 +0000 Subject: [PATCH] TexViewer --- direct/src/showutil/TexViewer.py | 81 ++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 direct/src/showutil/TexViewer.py diff --git a/direct/src/showutil/TexViewer.py b/direct/src/showutil/TexViewer.py new file mode 100644 index 0000000000..6fbbf22683 --- /dev/null +++ b/direct/src/showutil/TexViewer.py @@ -0,0 +1,81 @@ +from pandac.PandaModules import * +from direct.showbase.DirectObject import DirectObject + +class TexViewer(DirectObject): + """ A simple class to pop up a card onscreen to see the contents + of a texture. """ + + def __init__(self, tex): + self.tex = tex + self.cleanedUp = False + + self.root = aspect2d.attachNewNode('texViewer') + self.root.setBin('gui-popup', 10000) + + cards = self.root.attachNewNode('cards') + + # We'll put the full-resolution texture on the left. + cm = CardMaker('left') + l, r, b, t = (-1, -0.1, 0, 0.9) + cm.setFrame(l, r, b, t) + left = cards.attachNewNode(cm.generate()) + left.setTexture(self.tex) + left.setTransparency(TransparencyAttrib.MAlpha) + + ls = LineSegs('frame') + ls.setColor(0, 0, 0, 1) + ls.moveTo(l, 0, b) + ls.drawTo(r, 0, b) + ls.drawTo(r, 0, t) + ls.drawTo(l, 0, t) + ls.drawTo(l, 0, b) + cards.attachNewNode(ls.create()) + + + # And the "simple", reduced-resolution version goes on the + # right. + if self.tex.hasSimpleRamImage(): + self.t2 = Texture('simple') + self.t2.setup2dTexture(self.tex.getSimpleXSize(), + self.tex.getSimpleYSize(), + Texture.TUnsignedByte, + Texture.FRgba8) + self.t2.setRamImage(self.tex.getSimpleRamImage()) + + cm = CardMaker('right') + l, r, b, t = (0.1, 1, 0, 0.9) + cm.setFrame(l, r, b, t) + right = cards.attachNewNode(cm.generate()) + right.setTexture(self.t2) + right.setTransparency(TransparencyAttrib.MAlpha) + + ls = LineSegs('frame') + ls.setColor(0, 0, 0, 1) + ls.moveTo(l, 0, b) + ls.drawTo(r, 0, b) + ls.drawTo(r, 0, t) + ls.drawTo(l, 0, t) + ls.drawTo(l, 0, b) + cards.attachNewNode(ls.create()) + + # Scale both sides by the aspect ratio. + if self.tex.getXSize() > self.tex.getYSize(): + cards.setScale(1, 1, float(self.tex.getYSize()) / self.tex.getXSize()) + else: + cards.setScale(float(self.tex.getXSize()) / self.tex.getYSize(), 1, 1) + + # Label the texture. + tn = TextNode('label') + tn.setShadow(0.1, 0.1) + tn.setText(self.tex.getName()) + tn.setAlign(tn.ACenter) + tnp = self.root.attachNewNode(tn) + tnp.setScale(0.1) + tnp.setPos(0, 0, -tn.getHeight() * 0.1) + + def cleanup(self): + if not self.cleanedUp: + self.root.removeNode() + self.cleanedUp = True + self.tex = None + self.t2 = None