Visualise actor bones (joints)

not by me, by rdb, no credit required (like he said)

from pandac.PandaModules import *
loadPrcFileData("", "interpolate-frames #t")
import direct.directbase.DirectStart
from direct.actor.Actor import Actor
from random import random

actor = Actor("panda", {"walk" : "panda-walk.egg"})
actor.reparentTo(render)
actor.setBin('background', 1)

def walkJointHierarchy(actor, part, parentNode = None, indent = ""):
    if isinstance(part, CharacterJoint):
        np = actor.exposeJoint(None, 'modelRoot', part.getName())

        if parentNode and parentNode.getName() != "root":
            lines = LineSegs()
            lines.setThickness(3.0)
            lines.setColor(random(), random(), random())
            lines.moveTo(0, 0, 0)
            lines.drawTo(np.getPos(parentNode))
            lnp = parentNode.attachNewNode(lines.create())
            lnp.setBin("fixed", 40)
            lnp.setDepthWrite(False)
            lnp.setDepthTest(False)

        parentNode = np

    for child in part.getChildren():
        walkJointHierarchy(actor, child, parentNode, indent + "  ")

walkJointHierarchy(actor, actor.getPartBundle('modelRoot'), None)

actor.loop("walk")
base.cam.setY(-50)

run()

This is particulary useful for debugging and for editors. I use this for debugging procedurally generated actor codeā€¦