test_bounding_plane.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. from panda3d.core import Plane, BoundingPlane, BoundingSphere, BoundingVolume
  2. def test_plane_contains_sphere():
  3. plane = BoundingPlane((0, 0, 1, 0))
  4. # Sphere above plane
  5. assert plane.contains(BoundingSphere((0, 0, 2), 1)) == BoundingVolume.IF_no_intersection
  6. # Sphere intersecting surface of plane
  7. assert plane.contains(BoundingSphere((0, 0, 0), 1)) == BoundingVolume.IF_possible | BoundingVolume.IF_some
  8. # Sphere below plane
  9. assert plane.contains(BoundingSphere((0, 0, -2), 1)) == BoundingVolume.IF_possible | BoundingVolume.IF_some | BoundingVolume.IF_all
  10. def test_plane_contains_plane():
  11. # Plane should always fully contain itself.
  12. a = BoundingPlane((1, 0, 0, 1))
  13. assert a.contains(a) == BoundingVolume.IF_possible | BoundingVolume.IF_some | BoundingVolume.IF_all
  14. # Plane with its mirror image
  15. a = BoundingPlane((1, 0, 0, 1))
  16. b = BoundingPlane((-1, 0, 0, -1))
  17. assert a.contains(b) == BoundingVolume.IF_no_intersection
  18. assert b.contains(a) == BoundingVolume.IF_no_intersection
  19. # One plane above the other
  20. a = BoundingPlane(Plane((1, 0, 0), (1, 0, 0)))
  21. b = BoundingPlane(Plane((1, 0, 0), (2, 0, 0)))
  22. assert a.contains(b) == BoundingVolume.IF_possible | BoundingVolume.IF_some
  23. assert b.contains(a) == BoundingVolume.IF_possible | BoundingVolume.IF_some | BoundingVolume.IF_all
  24. # Opposing planes with distance between them.
  25. a = BoundingPlane(Plane((1, 0, 0), (1, 0, 0)))
  26. b = BoundingPlane(Plane((-1, 0, 0), (2, 0, 0)))
  27. assert a.contains(b) == BoundingVolume.IF_no_intersection
  28. assert b.contains(a) == BoundingVolume.IF_no_intersection
  29. # Planes overlapping in the same axis.
  30. a = BoundingPlane(Plane((1, 0, 0), (2, 0, 0)))
  31. b = BoundingPlane(Plane((-1, 0, 0), (1, 0, 0)))
  32. assert a.contains(b) == BoundingVolume.IF_possible | BoundingVolume.IF_some
  33. assert b.contains(a) == BoundingVolume.IF_possible | BoundingVolume.IF_some
  34. # Planes overlapping due to not sharing a normal vector.
  35. a = BoundingPlane(Plane((1, 0, 0), (2, 0, 0)))
  36. b = BoundingPlane(Plane((0.8, 0.6, 0), (4, 0, 0)))
  37. assert a.contains(b) == BoundingVolume.IF_possible | BoundingVolume.IF_some
  38. assert b.contains(a) == BoundingVolume.IF_possible | BoundingVolume.IF_some
  39. # Same as above.
  40. a = BoundingPlane(Plane((1, 0, 0), (2, 0, 0)))
  41. b = BoundingPlane(Plane((-0.8, -0.6, 0), (4, 0, 0)))
  42. assert a.contains(b) == BoundingVolume.IF_possible | BoundingVolume.IF_some
  43. assert b.contains(a) == BoundingVolume.IF_possible | BoundingVolume.IF_some
  44. # Planes pointing along different major axes.
  45. a = BoundingPlane(Plane((1, 0, 0, 0)))
  46. b = BoundingPlane(Plane((0, 1, 0, 0)))
  47. c = BoundingPlane(Plane((0, 0, 1, 0)))
  48. assert a.contains(b) == BoundingVolume.IF_possible | BoundingVolume.IF_some
  49. assert b.contains(c) == BoundingVolume.IF_possible | BoundingVolume.IF_some
  50. assert a.contains(c) == BoundingVolume.IF_possible | BoundingVolume.IF_some