View Single Post
  #1  
Old 02-14-2012, 01:53 PM
EnvisMJ EnvisMJ is offline
Member
 
Join Date: May 2009
Location: Purdue University, West Lafayette, Indiana
Posts: 44
Identify a class via its mesh

So I've been having a problem for a while, I need to identify a class object via the 3D mesh that represents it in the environment.

Example code:

Code:
import viz
import vizact

#Sample Environment
ground = viz.add('tut_ground.wrl')
ground.tag = "You missed clicking on a box."

class exampleObject(object):	#Example class containing a mesh
	def __init__(self,classTag,geometryTag,x,y,z,color):
		self.tag = classTag
		self.model = viz.add('box.wrl')
		self.model.tag = geometryTag
		self.model.setPosition(x,y,z)
		self.model.color(color)
		self.model.setScale(.333,.333,.333)

#Creating some objects
A = exampleObject("classA","geometryA",-.5,1.6,2,viz.RED)
B = exampleObject("classB","geometryB",0,1.6,2,viz.BLUE)
C = exampleObject("classC","geometryC",.5,1.6,2,viz.GREEN)

def clickPick():	#Pick an object
	mesh = viz.pick()
	classObject = mesh  ###This line should be modified###
	print classObject.tag

vizact.onmousedown(viz.MOUSEBUTTON_LEFT, clickPick)	#Pick an object on Left-click

viz.go()


#The problem, how do I go from the mesh to the class object...

#As in what (function) do I need to apply to the [mesh] to return the [class object]
#Example:

def classPick():	#Pick an object, print it's class' tag
	mesh = viz.pick()
	classObject = mesh.(function)()
	print classObject.tag
	
#Should print "classA" rather than "geometryA"
#Should print "classB" rather than "geometryB"
#Should print "classC" rather than "geometryC"
How do I get it to return the class object rather than the geometry?
Reply With Quote