test_egg_transform.py 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  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. EGG_TRANSFORM_MISSING = """
  6. <CoordinateSystem> { %s }
  7. <Group> {
  8. }
  9. """
  10. EGG_TRANSFORM_EMPTY = """
  11. <CoordinateSystem> { %s }
  12. <Group> {
  13. <Transform> {
  14. }
  15. }
  16. """
  17. EGG_TRANSFORM_IDENT = """
  18. <CoordinateSystem> { %s }
  19. <Group> {
  20. <Transform> {
  21. <Matrix4> {
  22. 1 0 0 0
  23. 0 1 0 0
  24. 0 0 1 0
  25. 0 0 0 1
  26. }
  27. }
  28. }
  29. """
  30. EGG_TRANSFORM_MATRIX = """
  31. <CoordinateSystem> { %s }
  32. <Group> {
  33. <Transform> {
  34. <Matrix4> {
  35. 5 2 -3 4
  36. 5 6 7 8
  37. 9 1 -3 2
  38. 5 2 5 2
  39. }
  40. }
  41. }
  42. """
  43. COORD_SYSTEMS = {
  44. core.CS_zup_right: "zup-right",
  45. core.CS_yup_right: "yup-right",
  46. core.CS_zup_left: "zup-left",
  47. core.CS_yup_left: "yup-left",
  48. }
  49. def read_egg_string(string):
  50. """Reads an EggData from a string."""
  51. stream = core.StringStream(string.encode('utf-8'))
  52. data = egg.EggData()
  53. assert data.read(stream)
  54. return data
  55. @pytest.mark.parametrize("coordsys", COORD_SYSTEMS.keys())
  56. def test_egg_transform_missing(coordsys):
  57. data = read_egg_string(EGG_TRANSFORM_MISSING % COORD_SYSTEMS[coordsys])
  58. assert data.get_coordinate_system() == coordsys
  59. child, = data.get_children()
  60. assert not child.has_transform3d()
  61. assert child.transform_is_identity()
  62. assert child.get_vertex_frame() == core.Mat4D.ident_mat()
  63. assert child.get_node_frame() == core.Mat4D.ident_mat()
  64. assert child.get_vertex_frame_inv() == core.Mat4D.ident_mat()
  65. assert child.get_node_frame_inv() == core.Mat4D.ident_mat()
  66. assert child.get_vertex_to_node() == core.Mat4D.ident_mat()
  67. assert child.get_node_to_vertex() == core.Mat4D.ident_mat()
  68. @pytest.mark.parametrize("coordsys", COORD_SYSTEMS.keys())
  69. def test_egg_transform_empty(coordsys):
  70. data = read_egg_string(EGG_TRANSFORM_EMPTY % COORD_SYSTEMS[coordsys])
  71. assert data.get_coordinate_system() == coordsys
  72. child, = data.get_children()
  73. assert not child.has_transform3d()
  74. assert child.transform_is_identity()
  75. assert child.get_vertex_frame() == core.Mat4D.ident_mat()
  76. assert child.get_node_frame() == core.Mat4D.ident_mat()
  77. assert child.get_vertex_frame_inv() == core.Mat4D.ident_mat()
  78. assert child.get_node_frame_inv() == core.Mat4D.ident_mat()
  79. assert child.get_vertex_to_node() == core.Mat4D.ident_mat()
  80. assert child.get_node_to_vertex() == core.Mat4D.ident_mat()
  81. @pytest.mark.parametrize("coordsys", COORD_SYSTEMS.keys())
  82. def test_egg_transform_ident(coordsys):
  83. data = read_egg_string(EGG_TRANSFORM_IDENT % COORD_SYSTEMS[coordsys])
  84. assert data.get_coordinate_system() == coordsys
  85. child, = data.get_children()
  86. assert child.has_transform3d()
  87. assert child.transform_is_identity()
  88. assert child.get_vertex_frame() == core.Mat4D.ident_mat()
  89. assert child.get_node_frame() == core.Mat4D.ident_mat()
  90. assert child.get_vertex_frame_inv() == core.Mat4D.ident_mat()
  91. assert child.get_node_frame_inv() == core.Mat4D.ident_mat()
  92. assert child.get_vertex_to_node() == core.Mat4D.ident_mat()
  93. assert child.get_node_to_vertex() == core.Mat4D.ident_mat()
  94. @pytest.mark.parametrize("coordsys", COORD_SYSTEMS.keys())
  95. def test_egg_transform_matrix(coordsys):
  96. data = read_egg_string(EGG_TRANSFORM_MATRIX % COORD_SYSTEMS[coordsys])
  97. assert data.get_coordinate_system() == coordsys
  98. mat = core.Mat4D(5, 2, -3, 4, 5, 6, 7, 8, 9, 1, -3, 2, 5, 2, 5, 2)
  99. mat_inv = core.invert(mat)
  100. child, = data.get_children()
  101. assert child.has_transform3d()
  102. assert not child.transform_is_identity()
  103. assert child.get_transform3d() == mat
  104. assert child.get_vertex_frame() == core.Mat4D.ident_mat()
  105. assert child.get_node_frame() == mat
  106. assert child.get_vertex_frame_inv() == core.Mat4D.ident_mat()
  107. assert child.get_node_frame_inv() == mat_inv
  108. assert child.get_vertex_to_node() == mat_inv
  109. assert child.get_node_to_vertex() == mat