| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- from panda3d import navigation
- from panda3d import navmeshgen
- from panda3d import core
- def reconstruct(object):
- # Create a temporary buffer, which we first write the object into, and
- # subsequently read it from again.
-
- buffer = core.DatagramBuffer()
- writer = core.BamWriter(buffer)
- writer.init()
- writer.write_object(object)
- reader = core.BamReader(buffer)
- reader.init()
- object = reader.read_object()
- reader.resolve()
- return object
- def test_nav_mesh_bam():
- data = core.GeomVertexData("", core.GeomVertexFormat.get_v3(), core.Geom.UH_static)
- vertex = core.GeomVertexWriter(data, "vertex")
- vertex.add_data3((0, 0, 0))
- vertex.add_data3((100, 0, 3))
- vertex.add_data3((100, 200, 1))
- vertex.add_data3((50, 50, 4))
-
- prim = core.GeomTriangles(core.Geom.UH_static)
- prim.add_vertices(0, 1, 2)
- prim.close_primitive()
- geom = core.Geom(data)
- geom.add_primitive(prim)
- prim.add_vertices(3, 1, 2)
- prim.close_primitive()
- node = core.GeomNode('gnode')
- node.add_geom(geom)
- scene = core.NodePath(node)
-
- # Defining navmesh as object of NavMehsBuilder class.
- builder = navmeshgen.NavMeshBuilder()
- # Extracting geoms from 'scene' and calculating vertices and triangles.
- builder.from_node_path(scene)
-
- navmesh = builder.build()
- vertCount = navmesh.get_vert_count()
- polyCount = navmesh.get_poly_count()
- detailVertsCount = navmesh.get_detail_vert_count()
- detailTriCount = navmesh.get_detail_tri_count()
- navmeshBam = reconstruct(navmesh)
- assert type(navmesh) == type(navmeshBam)
- assert vertCount == navmeshBam.get_vert_count()
- assert polyCount == navmeshBam.get_poly_count()
- assert detailVertsCount == navmeshBam.get_detail_vert_count()
- assert detailTriCount == navmeshBam.get_detail_tri_count()
- def test_nav_mesh_node_bam():
- data = core.GeomVertexData("", core.GeomVertexFormat.get_v3(), core.Geom.UH_static)
- vertex = core.GeomVertexWriter(data, "vertex")
- vertex.add_data3((0, 0, 0))
- vertex.add_data3((100, 0, 3))
- vertex.add_data3((100, 200, 1))
- vertex.add_data3((50, 50, 4))
-
- prim = core.GeomTriangles(core.Geom.UH_static)
- prim.add_vertices(0, 1, 2)
- prim.close_primitive()
- geom = core.Geom(data)
- geom.add_primitive(prim)
- prim.add_vertices(3, 1, 2)
- prim.close_primitive()
- node = core.GeomNode('gnode')
- node.add_geom(geom)
- scene = core.NodePath(node)
-
- # Defining navmesh as object of NavMehsBuilder class.
- builder = navmeshgen.NavMeshBuilder()
- # Extracting geoms from 'scene' and calculating vertices and triangles.
- builder.from_node_path(scene)
-
- navmesh = builder.build()
- navmeshnode = navigation.NavMeshNode("navmeshnode",navmesh)
- vertCount = navmeshnode.get_nav_mesh().get_vert_count()
- polyCount = navmeshnode.get_nav_mesh().get_poly_count()
- detailVertsCount = navmeshnode.get_nav_mesh().get_detail_vert_count()
- detailTriCount = navmeshnode.get_nav_mesh().get_detail_tri_count()
- navmeshNodeBam = reconstruct(navmeshnode)
- assert type(navmeshnode) == type(navmeshNodeBam)
- assert vertCount == navmeshNodeBam.get_nav_mesh().get_vert_count()
- assert polyCount == navmeshNodeBam.get_nav_mesh().get_poly_count()
- assert detailVertsCount == navmeshNodeBam.get_nav_mesh().get_detail_vert_count()
- assert detailTriCount == navmeshNodeBam.get_nav_mesh().get_detail_tri_count()
- def test_nav_query_bam():
- data = core.GeomVertexData("", core.GeomVertexFormat.get_v3(), core.Geom.UH_static)
- vertex = core.GeomVertexWriter(data, "vertex")
- vertex.add_data3((0, 0, 0))
- vertex.add_data3((100, 0, 3))
- vertex.add_data3((100, 200, 1))
- vertex.add_data3((50, 50, 4))
-
- prim = core.GeomTriangles(core.Geom.UH_static)
- prim.add_vertices(0, 1, 2)
- prim.close_primitive()
- geom = core.Geom(data)
- geom.add_primitive(prim)
- prim.add_vertices(3, 1, 2)
- prim.close_primitive()
- node = core.GeomNode('gnode')
- node.add_geom(geom)
- scene = core.NodePath(node)
-
- # Defining navmesh as object of NavMehsBuilder class.
- builder = navmeshgen.NavMeshBuilder()
- # Extracting geoms from 'scene' and calculating vertices and triangles.
- builder.from_node_path(scene)
-
- navmesh = builder.build()
- query = navigation.NavMeshQuery(navmesh)
- pos = core.LPoint3(50,55,3);
- query.nearest_point(pos)
- path = query.find_path(pos, core.LPoint3(100,0,3))
- navmeshBam = reconstruct(navmesh)
- queryBam = navigation.NavMeshQuery(navmeshBam)
- posBam = core.LPoint3(50,55,3);
- queryBam.nearest_point(posBam)
- pathBam = query.find_path(posBam, core.LPoint3(100,0,3))
- assert pos == posBam
- assert len(path) == len(pathBam)
|