test_geom.py 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. from panda3d import core
  2. empty_format = core.GeomVertexFormat.get_empty()
  3. def test_geom_decompose_in_place():
  4. vertex_data = core.GeomVertexData("", empty_format, core.GeomEnums.UH_static)
  5. prim = core.GeomTristrips(core.GeomEnums.UH_static)
  6. prim.add_vertex(0)
  7. prim.add_vertex(1)
  8. prim.add_vertex(2)
  9. prim.add_vertex(3)
  10. prim.close_primitive()
  11. geom = core.Geom(vertex_data)
  12. geom.add_primitive(prim)
  13. geom.decompose_in_place()
  14. prim = geom.get_primitive(0)
  15. assert tuple(prim.get_vertex_list()) == (0, 1, 2, 2, 1, 3)
  16. def test_geom_decompose():
  17. vertex_data = core.GeomVertexData("", empty_format, core.GeomEnums.UH_static)
  18. prim = core.GeomTristrips(core.GeomEnums.UH_static)
  19. prim.add_vertex(0)
  20. prim.add_vertex(1)
  21. prim.add_vertex(2)
  22. prim.add_vertex(3)
  23. prim.close_primitive()
  24. geom = core.Geom(vertex_data)
  25. geom.add_primitive(prim)
  26. new_geom = geom.decompose()
  27. new_prim = new_geom.get_primitive(0)
  28. assert tuple(new_prim.get_vertex_list()) == (0, 1, 2, 2, 1, 3)
  29. # Old primitive should still be unchanged
  30. assert prim == geom.get_primitive(0)
  31. def test_geom_calc_sphere_bounds():
  32. # Ensure that it ignores NaN
  33. data = core.GeomVertexData("", core.GeomVertexFormat.get_v3(), core.Geom.UH_static)
  34. vertex = core.GeomVertexWriter(data, "vertex")
  35. vertex.add_data3((float("NaN"), 0, 0))
  36. vertex.add_data3((1, 1, 1))
  37. vertex.add_data3((1, 1, 2))
  38. prim = core.GeomPoints(core.Geom.UH_static)
  39. prim.add_next_vertices(3)
  40. geom = core.Geom(data)
  41. geom.add_primitive(prim)
  42. geom.set_bounds_type(core.BoundingVolume.BT_sphere)
  43. bounds = geom.get_bounds()
  44. assert isinstance(bounds, core.BoundingSphere)
  45. assert bounds.get_center() == (1, 1, 1.5)
  46. assert bounds.get_radius() == 0.5
  47. def test_geom_calc_box_bounds():
  48. # Ensure that it ignores NaN
  49. data = core.GeomVertexData("", core.GeomVertexFormat.get_v3(), core.Geom.UH_static)
  50. vertex = core.GeomVertexWriter(data, "vertex")
  51. vertex.add_data3((float("NaN"), 0, 0))
  52. vertex.add_data3((1, 1, 1))
  53. vertex.add_data3((1, 1, 2))
  54. prim = core.GeomPoints(core.Geom.UH_static)
  55. prim.add_next_vertices(3)
  56. geom = core.Geom(data)
  57. geom.add_primitive(prim)
  58. geom.set_bounds_type(core.BoundingVolume.BT_box)
  59. bounds = geom.get_bounds()
  60. assert isinstance(bounds, core.BoundingBox)
  61. assert bounds.get_min() == (1, 1, 1)
  62. assert bounds.get_max() == (1, 1, 2)