Parcourir la source

add show_collisions

David Rose il y a 22 ans
Parent
commit
9f577fdc28

+ 35 - 0
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
 
 ////////////////////////////////////////////////////////////////////

+ 5 - 0
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