mirror of
https://github.com/panda3d/panda3d.git
synced 2025-10-19 05:06:25 -04:00
85 lines
2.4 KiB
Python
85 lines
2.4 KiB
Python
from panda3d import core
|
|
|
|
empty_format = core.GeomVertexFormat.get_empty()
|
|
|
|
|
|
def test_geom_decompose_in_place():
|
|
vertex_data = core.GeomVertexData("", empty_format, core.GeomEnums.UH_static)
|
|
prim = core.GeomTristrips(core.GeomEnums.UH_static)
|
|
prim.add_vertex(0)
|
|
prim.add_vertex(1)
|
|
prim.add_vertex(2)
|
|
prim.add_vertex(3)
|
|
prim.close_primitive()
|
|
|
|
geom = core.Geom(vertex_data)
|
|
geom.add_primitive(prim)
|
|
|
|
geom.decompose_in_place()
|
|
|
|
prim = geom.get_primitive(0)
|
|
assert tuple(prim.get_vertex_list()) == (0, 1, 2, 2, 1, 3)
|
|
|
|
|
|
def test_geom_decompose():
|
|
vertex_data = core.GeomVertexData("", empty_format, core.GeomEnums.UH_static)
|
|
prim = core.GeomTristrips(core.GeomEnums.UH_static)
|
|
prim.add_vertex(0)
|
|
prim.add_vertex(1)
|
|
prim.add_vertex(2)
|
|
prim.add_vertex(3)
|
|
prim.close_primitive()
|
|
|
|
geom = core.Geom(vertex_data)
|
|
geom.add_primitive(prim)
|
|
|
|
new_geom = geom.decompose()
|
|
|
|
new_prim = new_geom.get_primitive(0)
|
|
assert tuple(new_prim.get_vertex_list()) == (0, 1, 2, 2, 1, 3)
|
|
|
|
# Old primitive should still be unchanged
|
|
assert prim == geom.get_primitive(0)
|
|
|
|
|
|
def test_geom_calc_sphere_bounds():
|
|
# Ensure that it ignores NaN
|
|
data = core.GeomVertexData("", core.GeomVertexFormat.get_v3(), core.Geom.UH_static)
|
|
vertex = core.GeomVertexWriter(data, "vertex")
|
|
vertex.add_data3((float("NaN"), 0, 0))
|
|
vertex.add_data3((1, 1, 1))
|
|
vertex.add_data3((1, 1, 2))
|
|
|
|
prim = core.GeomPoints(core.Geom.UH_static)
|
|
prim.add_next_vertices(3)
|
|
|
|
geom = core.Geom(data)
|
|
geom.add_primitive(prim)
|
|
geom.set_bounds_type(core.BoundingVolume.BT_sphere)
|
|
|
|
bounds = geom.get_bounds()
|
|
assert isinstance(bounds, core.BoundingSphere)
|
|
assert bounds.get_center() == (1, 1, 1.5)
|
|
assert bounds.get_radius() == 0.5
|
|
|
|
|
|
def test_geom_calc_box_bounds():
|
|
# Ensure that it ignores NaN
|
|
data = core.GeomVertexData("", core.GeomVertexFormat.get_v3(), core.Geom.UH_static)
|
|
vertex = core.GeomVertexWriter(data, "vertex")
|
|
vertex.add_data3((float("NaN"), 0, 0))
|
|
vertex.add_data3((1, 1, 1))
|
|
vertex.add_data3((1, 1, 2))
|
|
|
|
prim = core.GeomPoints(core.Geom.UH_static)
|
|
prim.add_next_vertices(3)
|
|
|
|
geom = core.Geom(data)
|
|
geom.add_primitive(prim)
|
|
geom.set_bounds_type(core.BoundingVolume.BT_box)
|
|
|
|
bounds = geom.get_bounds()
|
|
assert isinstance(bounds, core.BoundingBox)
|
|
assert bounds.get_min() == (1, 1, 1)
|
|
assert bounds.get_max() == (1, 1, 2)
|