I think you should consider using a cull callback instead of a draw callback for things like that. With a cull callback, you do still have access to the original node object, and it’s still only called if the parent object is in view. And, you can use it to do custom culling checks.
In a cull callback, you can call
getData() on the callback data, which returns a CullTraverserData object. This has a
node() method to get the underlying PandaNode, and ways to obtain the accumulated transformation.
For the record, Panda3D’s animation system does not animate models that are out of view.