PDA

View Full Version : Texturing a quad from within a class


EnvisMJ
01-18-2012, 12:48 PM
So I'm trying to texture a quad bound to the screen from within a class.

Can anyone explain why this sample code works :

image = viz.add('Textures/VialLabels/Inventory Image - WHITE.png')
quad = viz.addTexQuad(viz.SCREEN,align=viz.TEXT_LEFT_BOTT OM,pos=(0,0,0))
quad.texture(image)
quad.setScale(6,3,1)

AND this doesn't?

import viz

class inventory(object):
global bulkInventoryBins,medicationVials
def __init__(self,contentsImage=""):
self.obj = viz.add('box.wrl')
self.obj.infoImage = contentsImage
def showInfoImage(self):
self.infoQuad = viz.addTexQuad(viz.SCREEN,align=viz.TEXT_LEFT_BOTT OM,pos=(0,0,0))
self.infoQuad.texture(self.obj.infoImage)
self.infoQuad.setScale(6,3,1)
def removeInfoImage(self):
self.infoQuad.remove()

A = inventory("Textures/VialLabels/Inventory Image - WHITE.png")
A.showInfoImage()
viz.go()

EnvisMJ
01-18-2012, 01:00 PM
Clarification:

With the first piece of code, the quad appears, sized/positioned correctly, and with the texture applied. Also, "quad.remove()" will delete the quad.

With the second piece of code, the quad appears, sized/positioned correctly, however, it remains white with no texture. Also, "self.infoQuad.remove()" doesn't seem to remove it.

farshizzo
01-18-2012, 01:04 PM
In the second example you are not actually creating a texture object. You are just passing the string containing the filename to the texture command. Unfortunately, the texture command silently ignores this error. It will be modified in a future release to raise an exception in this case. Either way, you can fix this problem by modifying the line:self.obj.infoImage = contentsImageto:self.obj.infoImage = viz.add(contentsImage)

EnvisMJ
01-18-2012, 01:23 PM
Awesome, thanks. ? Are you the only developer on the forums? Haven't seen anything from Jeff or Gladsome in a while.

Any idea why the remove doesn't seem to be working right?

farshizzo
01-18-2012, 01:37 PM
There should be other developers and support team members active on this forum.

Your sample code never actually calls the removeInfoImage command. I tried adding a call to that command and it seems to work fine. You will need to make sure it is called after showInfoImage since the infoQuad attribute will not have been created yet.

EnvisMJ
01-24-2012, 01:12 PM
ah, thanks :-)