This repository has been archived on 2020-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
Files
Indoor/tests/navMesh/TestNavMeshSub.cpp
frank 55061ef0da minor changes to floorplan
fixed some compile issues
worked on nav-meshes
added some tests
2018-01-16 12:41:05 +01:00

88 lines
2.3 KiB
C++

#ifdef WITH_TESTS
#include "../Tests.h"
#include "../../navMesh/NavMeshFactory.h"
#include "../../navMesh/walk/NavMeshSub.h"
using namespace NM;
TEST(NavMeshSub, build1) {
Floorplan::IndoorMap map;
Floorplan::Floor floor; map.floors.push_back(&floor); floor.atHeight = 0; floor.height = 3;
Floorplan::FloorOutlinePolygon outline; floor.outline.push_back(&outline);
outline.poly.points.push_back(Point2(0,0));
outline.poly.points.push_back(Point2(10,0));
outline.poly.points.push_back(Point2(10,10));
outline.poly.points.push_back(Point2(0,10));
outline.outdoor = false;
outline.method = Floorplan::OutlineMethod::ADD;
NavMeshSettings set;
NavMesh<NM::NavMeshTriangle> nm;
NavMeshFactory<NM::NavMeshTriangle> fac(&nm, set);
fac.build(&map);
nm.getLocation(Point3(1,1,0));
nm.getLocation(Point3(8,0.2,0));
nm.getLocation(Point3(0.2,8,0));
nm.getLocation(Point3(4.5,4.5,0));
}
TEST(NavMeshSub, draw) {
Floorplan::IndoorMap map;
Floorplan::Floor floor; map.floors.push_back(&floor); floor.atHeight = 0; floor.height = 3;
Floorplan::FloorOutlinePolygon outline; floor.outline.push_back(&outline);
outline.outdoor = false;
outline.method = Floorplan::OutlineMethod::ADD;
// circle (many triangles)
int i = 0;
for (float f = 0; f < M_PI*2; f += 0.1) {
const float x = std::cos(f) * 10;
const float y = std::sin(f) * 10;
outline.poly.points.push_back(Point2(x,y));
++i;
}
Floorplan::FloorOutlinePolygon remove; floor.outline.push_back(&remove);
remove.outdoor = false;
remove.method = Floorplan::OutlineMethod::REMOVE;
remove.poly.points.push_back(Point2(-2,-2));
remove.poly.points.push_back(Point2(+2,-2));
remove.poly.points.push_back(Point2(+2,+2));
remove.poly.points.push_back(Point2(-2,+2));
NavMeshSettings set;
NavMesh<NM::NavMeshTriangle> nm;
NavMeshFactory<NM::NavMeshTriangle> fac(&nm, set);
fac.build(&map);
NavMeshRandom<NM::NavMeshTriangle> rnd = nm.getRandom();
for (int i = 0; i < 1000; ++i) {
NavMeshLocation<NM::NavMeshTriangle> loc = rnd.draw();
ASSERT_TRUE(loc.tria->contains(loc.pos));
NavMeshSub<NM::NavMeshTriangle> sub2(loc, 5);
NavMeshRandom<NM::NavMeshTriangle> rnd2 = sub2.getRandom();
for (int j = 0; j < 100; ++j) {
NavMeshLocation<NM::NavMeshTriangle> loc2 = rnd2.draw();
ASSERT_TRUE(loc2.tria->contains(loc2.pos));
ASSERT_TRUE(sub2.contains(loc2.pos));
}
}
}
#endif