Meshdrawer beam

Just realized I posted this in a topic titled with β€œ[SOLVED]” so no one may notice. So Im creatign a new thread. I got most of the code from the Meshdrawer example given in another thread, I just added code so it woudl run stand-alone. Well , i thought it would :slight_smile:

The beam example is exactly what I’m trying to do, so I added some panda models and a beam.tga file I had, but when I run the code below - I don’t see anything when I hold down shift - am I missing something?

import direct.directbase.DirectStart
from direct.showbase import DirectObject
from direct.task import Task
from direct.actor.Actor import Actor
from pandac.PandaModules import *

class world(DirectObject.DirectObject):
	def __init__(self):
		self.accept("shift", self.handleShift, [1]) 
		self.accept("shift-up", self.handleShift, [0]) 
		
		self.panda1 = Actor("models/panda-model",{"walk": "models/panda-walk4"})
		self.panda1.setScale(0.005, 0.005, 0.005)
		self.panda1.setPos(-8, 42, 0)
		
		self.panda2 = Actor("models/panda-model",{"walk": "models/panda-walk4"})
		self.panda2.setScale(0.005, 0.005, 0.005)
		self.panda2.setPos(8, 42, 0)
		
		self.panda1.reparentTo(render)
		self.panda2.reparentTo(render)

	def handleShift(self, arg):
		if arg == 1: 
			source = self.panda1
			target = self.panda2
			self.createBeam(source, target) 
		else:
			self.deleteBeam() 

	def createBeam(self, source, target): 
		self.beammd = MeshDrawer() 
		self.beammd.setBudget(2) 
		self.mdbeamgennode = self.beammd.getRoot() 
		self.mdbeamgennode.reparentTo(render) 
		beamtex = loader.loadTexture("beam.tga")
		self.mdbeamgennode.setTexture(beamtex) 
		self.mdbeamgennode.setTransparency(True) 
		self.mdbeamgennode.setPos(0,0,0) 
		self.mdbeamgennode.setDepthWrite(False) 
		self.mdbeamgennode.setTwoSided(True) 
		self.mdbeamgennode.setLightOff(True) 
		taskMgr.add(self.drawBeam, "drawBeamTask", extraArgs=[source,target], appendTask=True) 

	def drawBeam(self, source, target, task): 
		t = globalClock.getFrameTime() 
		self.beammd.begin(base.cam,render) 
		# MeshDrawer expects Vec3(x,y,z), but getPos() returns a VBase3, that's why we use Vec3(object.getPos()) to convert the format. self.beammd.segment(Vec3(source.getPos()),Vec3(target.getPos()),Vec4(0,0,1.0,1.0),0.05*sin(t*20)+0.1,Vec4(0.2,1.0,1.0,1.0)) 
		# segment: start, stop, frame, size, color 
		self.beammd.end() 
		return task.cont 

	def deleteBeam(self): 
		self.mdbeamgennode.removeNode() 
		taskMgr.remove("drawBeamTask") 

# run the sample
g = world()
run()

any meshdrawer experts out there? :slight_smile: