mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-04 02:42:49 -04:00
105 lines
3.5 KiB
Python
105 lines
3.5 KiB
Python
import pytest
|
|
from panda3d import core
|
|
|
|
# Skip these tests if we can't import egg.
|
|
egg = pytest.importorskip("panda3d.egg")
|
|
|
|
|
|
COORD_SYSTEMS = [core.CS_zup_right, core.CS_yup_right, core.CS_zup_left, core.CS_yup_left]
|
|
|
|
|
|
@pytest.mark.parametrize("egg_coordsys", COORD_SYSTEMS)
|
|
@pytest.mark.parametrize("coordsys", COORD_SYSTEMS)
|
|
def test_egg2pg_transform_ident(egg_coordsys, coordsys):
|
|
# Ensures that an identity matrix always remains untouched.
|
|
group = egg.EggGroup("group")
|
|
group.add_matrix4(core.Mat4D.ident_mat())
|
|
assert group.transform_is_identity()
|
|
|
|
assert group.get_vertex_frame() == core.Mat4D.ident_mat()
|
|
assert group.get_node_frame() == core.Mat4D.ident_mat()
|
|
assert group.get_vertex_frame_inv() == core.Mat4D.ident_mat()
|
|
assert group.get_node_frame_inv() == core.Mat4D.ident_mat()
|
|
assert group.get_vertex_to_node() == core.Mat4D.ident_mat()
|
|
assert group.get_node_to_vertex() == core.Mat4D.ident_mat()
|
|
|
|
data = egg.EggData()
|
|
data.set_coordinate_system(egg_coordsys)
|
|
data.add_child(group)
|
|
|
|
root = egg.load_egg_data(data, coordsys)
|
|
assert root
|
|
node, = root.children
|
|
|
|
assert node.transform.is_identity()
|
|
|
|
|
|
@pytest.mark.parametrize("coordsys", COORD_SYSTEMS)
|
|
def test_egg2pg_transform_mat_unchanged(coordsys):
|
|
# Ensures that the matrix remains unchanged if coordinate system is same.
|
|
matv = (5, 2, -3, 4, 5, 6, 7, 8, 9, 1, -3, 2, 5, 2, 5, 2)
|
|
mat = core.Mat4D(*matv)
|
|
group = egg.EggGroup("group")
|
|
group.add_matrix4(mat)
|
|
assert not group.transform_is_identity()
|
|
|
|
assert group.get_vertex_frame() == core.Mat4D.ident_mat()
|
|
assert group.get_node_frame() == mat
|
|
assert group.get_vertex_frame_inv() == core.Mat4D.ident_mat()
|
|
assert group.get_node_frame_inv() == core.invert(mat)
|
|
assert group.get_vertex_to_node() == core.invert(mat)
|
|
assert group.get_node_to_vertex() == mat
|
|
|
|
data = egg.EggData()
|
|
data.set_coordinate_system(coordsys)
|
|
data.add_child(group)
|
|
|
|
root = egg.load_egg_data(data, coordsys)
|
|
assert root
|
|
node, = root.children
|
|
|
|
assert node.transform.mat == core.Mat4(*matv)
|
|
|
|
|
|
@pytest.mark.parametrize("egg_coordsys", COORD_SYSTEMS)
|
|
@pytest.mark.parametrize("coordsys", COORD_SYSTEMS)
|
|
def test_egg2pg_transform_pos3d(egg_coordsys, coordsys):
|
|
vpool = egg.EggVertexPool("vpool")
|
|
vtx = vpool.make_new_vertex(core.Point3D.rfu(-8, 0.5, 4.5, egg_coordsys))
|
|
|
|
point = egg.EggPoint()
|
|
point.add_vertex(vtx)
|
|
|
|
group = egg.EggGroup("group")
|
|
group.add_translate3d(core.Point3D.rfu(1, 2, 3, egg_coordsys))
|
|
assert not group.transform_is_identity()
|
|
group.add_child(point)
|
|
|
|
mat = group.get_transform3d()
|
|
assert group.get_vertex_frame() == core.Mat4D.ident_mat()
|
|
assert group.get_node_frame() == mat
|
|
assert group.get_vertex_frame_inv() == core.Mat4D.ident_mat()
|
|
assert group.get_node_frame_inv() == core.invert(mat)
|
|
assert group.get_vertex_to_node() == core.invert(mat)
|
|
assert group.get_node_to_vertex() == mat
|
|
|
|
assert group.get_vertex_frame_ptr() is None
|
|
assert group.get_vertex_frame_inv_ptr() is None
|
|
|
|
data = egg.EggData()
|
|
data.set_coordinate_system(egg_coordsys)
|
|
data.add_child(vpool)
|
|
data.add_child(group)
|
|
|
|
root = egg.load_egg_data(data, coordsys)
|
|
assert root
|
|
node, = root.children
|
|
|
|
# Ensure the node has the expected position.
|
|
assert node.transform.pos == core.Point3.rfu(1, 2, 3, coordsys)
|
|
|
|
# Get the location of the vertex. This is a quick, hacky way to get it.
|
|
point = core.NodePath(node).get_tight_bounds()[0]
|
|
assert point == core.Point3.rfu(-8, 0.5, 4.5, coordsys)
|
|
|