test_egg_coordsys.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import pytest
  2. from panda3d import core
  3. # Skip these tests if we can't import egg.
  4. egg = pytest.importorskip("panda3d.egg")
  5. COORD_SYSTEMS = [core.CS_zup_right, core.CS_yup_right, core.CS_zup_left, core.CS_yup_left]
  6. @pytest.mark.parametrize("egg_coordsys", COORD_SYSTEMS)
  7. @pytest.mark.parametrize("coordsys", COORD_SYSTEMS)
  8. def test_egg2pg_transform_ident(egg_coordsys, coordsys):
  9. # Ensures that an identity matrix always remains untouched.
  10. group = egg.EggGroup("group")
  11. group.add_matrix4(core.Mat4D.ident_mat())
  12. assert group.transform_is_identity()
  13. assert group.get_vertex_frame() == core.Mat4D.ident_mat()
  14. assert group.get_node_frame() == core.Mat4D.ident_mat()
  15. assert group.get_vertex_frame_inv() == core.Mat4D.ident_mat()
  16. assert group.get_node_frame_inv() == core.Mat4D.ident_mat()
  17. assert group.get_vertex_to_node() == core.Mat4D.ident_mat()
  18. assert group.get_node_to_vertex() == core.Mat4D.ident_mat()
  19. data = egg.EggData()
  20. data.set_coordinate_system(egg_coordsys)
  21. data.add_child(group)
  22. root = egg.load_egg_data(data, coordsys)
  23. assert root
  24. node, = root.children
  25. assert node.transform.is_identity()
  26. @pytest.mark.parametrize("coordsys", COORD_SYSTEMS)
  27. def test_egg2pg_transform_mat_unchanged(coordsys):
  28. # Ensures that the matrix remains unchanged if coordinate system is same.
  29. matv = (5, 2, -3, 4, 5, 6, 7, 8, 9, 1, -3, 2, 5, 2, 5, 2)
  30. mat = core.Mat4D(*matv)
  31. group = egg.EggGroup("group")
  32. group.add_matrix4(mat)
  33. assert not group.transform_is_identity()
  34. assert group.get_vertex_frame() == core.Mat4D.ident_mat()
  35. assert group.get_node_frame() == mat
  36. assert group.get_vertex_frame_inv() == core.Mat4D.ident_mat()
  37. assert group.get_node_frame_inv() == core.invert(mat)
  38. assert group.get_vertex_to_node() == core.invert(mat)
  39. assert group.get_node_to_vertex() == mat
  40. data = egg.EggData()
  41. data.set_coordinate_system(coordsys)
  42. data.add_child(group)
  43. root = egg.load_egg_data(data, coordsys)
  44. assert root
  45. node, = root.children
  46. assert node.transform.mat == core.Mat4(*matv)
  47. @pytest.mark.parametrize("egg_coordsys", COORD_SYSTEMS)
  48. @pytest.mark.parametrize("coordsys", COORD_SYSTEMS)
  49. def test_egg2pg_transform_pos3d(egg_coordsys, coordsys):
  50. vpool = egg.EggVertexPool("vpool")
  51. vtx = vpool.make_new_vertex(core.Point3D.rfu(-8, 0.5, 4.5, egg_coordsys))
  52. point = egg.EggPoint()
  53. point.add_vertex(vtx)
  54. group = egg.EggGroup("group")
  55. group.add_translate3d(core.Point3D.rfu(1, 2, 3, egg_coordsys))
  56. assert not group.transform_is_identity()
  57. group.add_child(point)
  58. mat = group.get_transform3d()
  59. assert group.get_vertex_frame() == core.Mat4D.ident_mat()
  60. assert group.get_node_frame() == mat
  61. assert group.get_vertex_frame_inv() == core.Mat4D.ident_mat()
  62. assert group.get_node_frame_inv() == core.invert(mat)
  63. assert group.get_vertex_to_node() == core.invert(mat)
  64. assert group.get_node_to_vertex() == mat
  65. assert group.get_vertex_frame_ptr() is None
  66. assert group.get_vertex_frame_inv_ptr() is None
  67. data = egg.EggData()
  68. data.set_coordinate_system(egg_coordsys)
  69. data.add_child(vpool)
  70. data.add_child(group)
  71. root = egg.load_egg_data(data, coordsys)
  72. assert root
  73. node, = root.children
  74. # Ensure the node has the expected position.
  75. assert node.transform.pos == core.Point3.rfu(1, 2, 3, coordsys)
  76. # Get the location of the vertex. This is a quick, hacky way to get it.
  77. point = core.NodePath(node).get_tight_bounds()[0]
  78. assert point == core.Point3.rfu(-8, 0.5, 4.5, coordsys)