many changes :P

This commit is contained in:
k-a-z-u
2016-01-21 20:01:20 +01:00
parent a7dc0cabbb
commit 12084fe147
29 changed files with 2900 additions and 144 deletions

View File

@@ -0,0 +1,29 @@
#ifdef WITH_TESTS
#include "../Tests.h"
#include "../../grid/factory/GridImportance.h"
#include "../../grid/factory/GridFactory.h"
#include "../../floorplan/FloorplanFactorySVG.h"
#include "Plot.h"
TEST(GridImportance, a) {
Grid<20, GP> g;
GridFactory<20, GP> gf(g);
FloorplanFactorySVG fpf(getDataFile("fp1.svg"), 6);
Floor f1 = fpf.getFloor("1");
gf.addFloor(f1, 20);
gf.removeIsolated();
GridImportance gi;
gi.addImportance(g, 20);
plot(g);
}
#endif

66
tests/grid/Plot.h Normal file
View File

@@ -0,0 +1,66 @@
#ifndef PLOT_H
#define PLOT_H
#include <KLib/misc/gnuplot/Gnuplot.h>
#include <KLib/misc/gnuplot/GnuplotSplot.h>
#include <KLib/misc/gnuplot/GnuplotSplotElementPoints.h>
#include <KLib/misc/gnuplot/GnuplotSplotElementColorPoints.h>
#include <KLib/misc/gnuplot/GnuplotSplotElementLines.h>
class GP : public GridNode, public GridPoint {
public:
float imp = 1.0f;
public:
GP() : GridNode(), GridPoint() {;}
GP(int x, int y, int z) : GridNode(), GridPoint(x,y,z) {;}
};
template <int gridSize_cm, typename T> void plot(Grid<gridSize_cm, T>& g) {
K::Gnuplot gp;
K::GnuplotSplot splot;
K::GnuplotSplotElementColorPoints points;
K::GnuplotSplotElementLines lines;
gp << "set ticslevel 0\n";
gp << "set view equal xyz\n";
gp << "set cbrange[0.5:1.0]\n";
gp << "set palette gray negative\n";
std::set<uint64_t> done;
int cnt = 0;
for (int i = 0; i < g.getNumNodes(); ++i) {
const GP& n1 = g[i];
points.add(K::GnuplotPoint3(n1.x_cm, n1.y_cm, n1.z_cm), n1.imp);
for (int n = 0; n < n1.getNumNeighbors(); ++n) {
const GP& n2 = n1.getNeighbor(n, g);
if (done.find(g.getUID(n2)) == done.end()) {
K::GnuplotPoint3 p1(n1.x_cm, n1.y_cm, n1.z_cm);
K::GnuplotPoint3 p2(n2.x_cm, n2.y_cm, n2.z_cm);
lines.addSegment(p1, p2);
++cnt;
}
}
done.insert(g.getUID(n1));
}
points.setPointSize(1);
//splot.add(&lines);
splot.add(&points);
gp.draw(splot);
gp.flush();
sleep(100);
}
#endif // PLOT_H

View File

@@ -27,20 +27,20 @@ TEST(BBox, intersect) {
GridNodeBBox bb1(GridPoint(20,20,20), 20);
// left
ASSERT_FALSE(bb1.intersects( Line2D(9, -999, 9, +999) ));
ASSERT_TRUE (bb1.intersects( Line2D(11, -999, 11, +999) ));
ASSERT_FALSE(bb1.intersects( Line2(9, -999, 9, +999) ));
ASSERT_TRUE (bb1.intersects( Line2(11, -999, 11, +999) ));
// right
ASSERT_TRUE (bb1.intersects( Line2D(29, -999, 29, +999) ));
ASSERT_FALSE(bb1.intersects( Line2D(31, -999, 31, +999) ));
ASSERT_TRUE (bb1.intersects( Line2(29, -999, 29, +999) ));
ASSERT_FALSE(bb1.intersects( Line2(31, -999, 31, +999) ));
// top
ASSERT_FALSE(bb1.intersects( Line2D(-999, 9, +999, 9) ));
ASSERT_TRUE (bb1.intersects( Line2D(-999, 11, +999, 11) ));
ASSERT_FALSE(bb1.intersects( Line2(-999, 9, +999, 9) ));
ASSERT_TRUE (bb1.intersects( Line2(-999, 11, +999, 11) ));
// bottom
ASSERT_TRUE (bb1.intersects( Line2D(-999, 29, +999, 29) ));
ASSERT_FALSE(bb1.intersects( Line2D(-999, 31, +999, 31) ));
ASSERT_TRUE (bb1.intersects( Line2(-999, 29, +999, 29) ));
ASSERT_FALSE(bb1.intersects( Line2(-999, 31, +999, 31) ));
}

View File

@@ -36,15 +36,15 @@ TEST(Grid, BBox) {
Grid<20, GP> grid;
int idx = grid.add(GP(40,40,40));
ASSERT_EQ(30, grid.getBBox(idx).x1_cm);
ASSERT_EQ(50, grid.getBBox(idx).x2_cm);
ASSERT_EQ(30, grid.getBBox(idx).y1_cm);
ASSERT_EQ(50, grid.getBBox(idx).y2_cm);
ASSERT_EQ(30, grid.getBBox(idx).getMin().x);
ASSERT_EQ(50, grid.getBBox(idx).getMax().x);
ASSERT_EQ(30, grid.getBBox(idx).getMin().y);
ASSERT_EQ(50, grid.getBBox(idx).getMax().y);
}
TEST(Grid, neighbors) {
TEST(Grid, connectBiDir) {
Grid<1, GP> grid;
@@ -54,10 +54,10 @@ TEST(Grid, neighbors) {
int idx4 = grid.add(GP( 1, 0, 0));
int idx5 = grid.add(GP(-1, 0, 0));
grid.connect(idx1, idx2);
grid.connect(idx1, idx3);
grid.connect(idx1, idx4);
grid.connect(idx1, idx5);
grid.connectBiDir(idx1, idx2);
grid.connectBiDir(idx1, idx3);
grid.connectBiDir(idx1, idx4);
grid.connectBiDir(idx1, idx5);
ASSERT_EQ(4, grid.getNumNeighbors(idx1));
ASSERT_EQ(1, grid.getNumNeighbors(idx2));
@@ -65,6 +65,54 @@ TEST(Grid, neighbors) {
ASSERT_EQ(1, grid.getNumNeighbors(idx4));
ASSERT_EQ(1, grid.getNumNeighbors(idx5));
ASSERT_EQ(grid[idx2], grid.getNeighbor(idx1, 0));
ASSERT_EQ(grid[idx3], grid.getNeighbor(idx1, 1));
ASSERT_EQ(grid[idx4], grid.getNeighbor(idx1, 2));
ASSERT_EQ(grid[idx5], grid.getNeighbor(idx1, 3));
}
TEST(Grid, disconnectBiDir) {
Grid<1, GP> grid;
int idx1 = grid.add(GP( 0, 0, 0));
int idx2 = grid.add(GP( 0, 1, 0));
int idx3 = grid.add(GP( 0,-1, 0));
int idx4 = grid.add(GP( 1, 0, 0));
int idx5 = grid.add(GP(-1, 0, 0));
grid.connectBiDir(idx1, idx2);
grid.connectBiDir(idx1, idx3);
grid.connectBiDir(idx1, idx4);
grid.connectBiDir(idx1, idx5);
// remove 1 <-> 4
grid.disconnectBiDir(idx1, idx4);
ASSERT_EQ(3, grid.getNumNeighbors(idx1));
ASSERT_EQ(0, grid.getNumNeighbors(idx4));
ASSERT_EQ(grid[idx2], grid.getNeighbor(idx1, 0));
ASSERT_EQ(grid[idx3], grid.getNeighbor(idx1, 1));
ASSERT_EQ(grid[idx5], grid.getNeighbor(idx1, 2));
// remove 1 <-> 5
grid.disconnectBiDir(idx1, idx5);
ASSERT_EQ(2, grid.getNumNeighbors(idx1));
ASSERT_EQ(0, grid.getNumNeighbors(idx5));
ASSERT_EQ(grid[idx2], grid.getNeighbor(idx1, 0));
ASSERT_EQ(grid[idx3], grid.getNeighbor(idx1, 1));
// remove 1 <-> 2
grid.disconnectBiDir(idx1, idx2);
ASSERT_EQ(1, grid.getNumNeighbors(idx1));
ASSERT_EQ(0, grid.getNumNeighbors(idx2));
ASSERT_EQ(grid[idx3], grid.getNeighbor(idx1, 0));
// remove 1 <-> 2
grid.disconnectBiDir(idx1, idx3);
ASSERT_EQ(0, grid.getNumNeighbors(idx1));
ASSERT_EQ(0, grid.getNumNeighbors(idx3));
}
TEST(Grid, uid) {
@@ -81,6 +129,87 @@ TEST(Grid, uid) {
}
TEST(Grid, remove) {
Grid<1, GP> grid;
GP gp1( 0, 0, 0);
GP gp2( 0, 1, 0);
GP gp3( 0,-1, 0);
GP gp4( 1, 0, 0);
GP gp5(-1, 0, 0);
int idx1 = grid.add(gp1);
int idx2 = grid.add(gp2);
int idx3 = grid.add(gp3);
int idx4 = grid.add(gp4);
int idx5 = grid.add(gp5);
grid.connectBiDir(idx1, idx2);
grid.connectBiDir(idx1, idx3);
grid.connectBiDir(idx1, idx4);
grid.connectBiDir(idx1, idx5);
grid.remove(idx1);
grid.cleanup();
ASSERT_EQ(4, grid.getNumNodes());
ASSERT_EQ(gp2, grid[0]);
ASSERT_EQ(gp3, grid[1]);
ASSERT_EQ(gp4, grid[2]);
ASSERT_EQ(gp5, grid[3]);
ASSERT_EQ(0, grid.getNumNeighbors(grid[0]));
ASSERT_EQ(0, grid.getNumNeighbors(grid[1]));
ASSERT_EQ(0, grid.getNumNeighbors(grid[2]));
ASSERT_EQ(0, grid.getNumNeighbors(grid[3]));
}
TEST(Grid, neighborIter) {
Grid<1, GP> grid;
int idx1 = grid.add(GP( 0, 0, 0));
int idx2 = grid.add(GP( 0, 1, 0));
int idx3 = grid.add(GP( 0,-1, 0));
int idx4 = grid.add(GP( 1, 0, 0));
int idx5 = grid.add(GP(-1, 0, 0));
grid.connectBiDir(idx1, idx2);
grid.connectBiDir(idx1, idx3);
grid.connectBiDir(idx1, idx4);
grid.connectBiDir(idx1, idx5);
int i = 0;
for (GP& node : grid.neighbors(idx1)) {++i;}
ASSERT_EQ(4, i);
}
TEST(Grid, bbox) {
Grid<1, GP> grid;
int idx1 = grid.add(GP( 0, 0, 0));
int idx2 = grid.add(GP( 0, 1, 0));
int idx3 = grid.add(GP( 0,-1, 0));
int idx4 = grid.add(GP( 1, 0, 0));
int idx5 = grid.add(GP(-1, 0, 0));
BBox3 bb = grid.getBBox();
ASSERT_EQ(bb.getMin().x, -1);
ASSERT_EQ(bb.getMin().y, -1);
ASSERT_EQ(bb.getMin().z, 0);
ASSERT_EQ(bb.getMax().x, +1);
ASSERT_EQ(bb.getMax().y, +1);
ASSERT_EQ(bb.getMax().z, 0);
}
TEST(Grid, nearest) {
Grid<20, GP> grid;

View File

@@ -4,42 +4,35 @@
#include "../../grid/factory/GridFactory.h"
#include "../../floorplan/FloorplanFactorySVG.h"
#include <KLib/misc/gnuplot/Gnuplot.h>
#include <KLib/misc/gnuplot/GnuplotSplot.h>
#include <KLib/misc/gnuplot/GnuplotSplotElementPoints.h>
class GP : public GridNode, public GridPoint {
public:
GP() : GridNode(), GridPoint() {;}
GP(int x, int y, int z) : GridNode(), GridPoint(x,y,z) {;}
};
#include "Plot.h"
TEST(GridFactory, create) {
Grid<20, GP> g;
Grid<20, GP> gInv;
GridFactory<20, GP> gf(g);
FloorplanFactorySVG fpf(getDataFile("test.svg"), 2);
FloorplanFactorySVG fpf(getDataFile("fp1.svg"), 4);
Floor f1 = fpf.getFloor("1");
Floor f2 = fpf.getFloor("2");
Stairs s1_2 = fpf.getStairs("1_2");
gf.addFloor(f1, 0);
gf.addFloor(f1, 20);
gf.addFloor(f2, 340);
gf.addStairs(s1_2, 20, 340);
gf.removeIsolated();
K::Gnuplot gp;
K::GnuplotSplot splot;
K::GnuplotSplotElementPoints points;
GridFactory<20, GP> gfInv(gInv);
gfInv.addInverted(g, 20);
gfInv.addInverted(g, 340);
for (int i = 0; i < g.getNumNodes(); ++i) {
const GP& node = g[i];
points.add(K::GnuplotPoint3(node.x_cm, node.y_cm, node.z_cm));
}
splot.add(&points);
gp.draw(splot);
gp.flush();
sleep(10);
// plot(gInv);
}
#endif