Browse Source

added test files for bam

Ashwini Jha 5 years ago
parent
commit
947d55a01e

+ 4 - 0
panda/src/navigation/navMesh.h

@@ -54,6 +54,10 @@ PUBLISHED:
   void set_nav_mesh(dtNavMesh *m) { _nav_mesh = m; }
   NavMesh();
   PT(GeomNode) draw_nav_mesh_geom();
+  int get_vert_count() { return _params.vertCount; }
+  int get_poly_count() { return _params.polyCount; }
+  int get_detail_vert_count() { return _params.detailVertsCount; }
+  int get_detail_tri_count() { return _params.detailTriCount; }
 
 private:
   dtNavMesh *_nav_mesh;

+ 165 - 0
tests/navigation/test_nav_mesh_bam.py

@@ -0,0 +1,165 @@
+from direct.showbase.ShowBase import ShowBase
+import direct.directbase.DirectStart
+from panda3d import navigation
+from panda3d import navmeshgen
+from panda3d import core
+from panda3d.core import NodePath
+from panda3d.core import LPoint3
+
+
+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.closePrimitive()
+
+    geom = core.Geom(data)
+    geom.add_primitive(prim)
+
+    prim.add_vertices(3, 1, 2)
+    prim.closePrimitive()
+
+    node = core.GeomNode('gnode')
+    node.addGeom(geom)
+
+    scene = NodePath(node)
+    
+    # Defining navmesh as object of NavMehsBuilder class.
+    builder = navmeshgen.NavMeshBuilder()
+
+    # Extracting geoms from 'scene' and calculating vertices and triangles.
+    builder.fromNodePath(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.closePrimitive()
+
+    geom = core.Geom(data)
+    geom.add_primitive(prim)
+
+    prim.add_vertices(3, 1, 2)
+    prim.closePrimitive()
+
+    node = core.GeomNode('gnode')
+    node.addGeom(geom)
+
+    scene = NodePath(node)
+    
+    # Defining navmesh as object of NavMehsBuilder class.
+    builder = navmeshgen.NavMeshBuilder()
+
+    # Extracting geoms from 'scene' and calculating vertices and triangles.
+    builder.fromNodePath(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.closePrimitive()
+
+    geom = core.Geom(data)
+    geom.add_primitive(prim)
+
+    prim.add_vertices(3, 1, 2)
+    prim.closePrimitive()
+
+    node = core.GeomNode('gnode')
+    node.addGeom(geom)
+
+    scene = NodePath(node)
+    
+    # Defining navmesh as object of NavMehsBuilder class.
+    builder = navmeshgen.NavMeshBuilder()
+
+    # Extracting geoms from 'scene' and calculating vertices and triangles.
+    builder.fromNodePath(scene)
+    
+    navmesh = builder.build()
+
+    query = navigation.NavMeshQuery(navmesh)
+    pos = LPoint3(50,55,3);
+    query.nearestPoint(pos)
+    path = query.findPath(pos,LPoint3(100,0,3))
+
+    navmeshBam = reconstruct(navmesh)
+    queryBam = navigation.NavMeshQuery(navmeshBam)
+    posBam = LPoint3(50,55,3);
+    queryBam.nearestPoint(posBam)
+    pathBam = query.findPath(posBam,LPoint3(100,0,3))
+
+    assert pos == posBam
+    assert len(path) == len(pathBam)
+    

+ 0 - 0
tests/navigation/test_navigation.py → tests/navmeshgen/test_mesh_gen.py