From 9f577fdc2880f0d0348fde3465d2e9e6c5063644 Mon Sep 17 00:00:00 2001 From: David Rose Date: Tue, 18 Nov 2003 22:40:47 +0000 Subject: [PATCH] add show_collisions --- panda/src/collide/collisionTraverser.cxx | 35 ++++++++++++++++++++++++ panda/src/collide/collisionTraverser.h | 5 ++++ 2 files changed, 40 insertions(+) diff --git a/panda/src/collide/collisionTraverser.cxx b/panda/src/collide/collisionTraverser.cxx index 2e22dc3146..53419a2a2d 100644 --- a/panda/src/collide/collisionTraverser.cxx +++ b/panda/src/collide/collisionTraverser.cxx @@ -21,6 +21,7 @@ #include "collisionEntry.h" #include "collisionPolygon.h" #include "collisionRecorder.h" +#include "collisionVisualizer.h" #include "config_collide.h" #include "transformState.h" @@ -358,6 +359,40 @@ set_recorder(CollisionRecorder *recorder) { } } } + +//////////////////////////////////////////////////////////////////// +// Function: CollisionTraverser::show_collisions +// Access: Published +// Description: This is a high-level function to create a +// CollisionVisualizer object to render the collision +// tests performed by this traverser. The supplied root +// should be any node in the scene graph; typically, the +// top node (e.g. render). The CollisionVisualizer will +// be attached to this node. +//////////////////////////////////////////////////////////////////// +CollisionVisualizer *CollisionTraverser:: +show_collisions(const NodePath &root) { + hide_collisions(); + CollisionVisualizer *viz = new CollisionVisualizer("show_collisions"); + _collision_visualizer_np = root.attach_new_node(viz); + set_recorder(viz); + return viz; +} + +//////////////////////////////////////////////////////////////////// +// Function: CollisionTraverser::hide_collisions +// Access: Published +// Description: Undoes the effect of a previous call to +// show_collisions(). +//////////////////////////////////////////////////////////////////// +void CollisionTraverser:: +hide_collisions() { + if (!_collision_visualizer_np.is_empty()) { + _collision_visualizer_np.remove_node(); + } + clear_recorder(); +} + #endif // DO_COLLISION_RECORDING //////////////////////////////////////////////////////////////////// diff --git a/panda/src/collide/collisionTraverser.h b/panda/src/collide/collisionTraverser.h index 994019eb55..8df8d04e64 100644 --- a/panda/src/collide/collisionTraverser.h +++ b/panda/src/collide/collisionTraverser.h @@ -31,6 +31,7 @@ class CollisionNode; class CollisionRecorder; +class CollisionVisualizer; class Geom; class NodePath; class CollisionEntry; @@ -77,6 +78,9 @@ PUBLISHED: INLINE bool has_recorder() const; INLINE CollisionRecorder *get_recorder() const; INLINE void clear_recorder(); + + CollisionVisualizer *show_collisions(const NodePath &root); + void hide_collisions(); #endif // DO_COLLISION_RECORDING void output(ostream &out) const; @@ -127,6 +131,7 @@ private: bool _respect_prev_transform; #ifdef DO_COLLISION_RECORDING CollisionRecorder *_recorder; + NodePath _collision_visualizer_np; #endif // DO_COLLISION_RECORDING // Statistics