#ifndef PAPERPLOT_H #define PAPERPLOT_H #include #include #include #include #include #include #include class PaperPlot { public: K::Gnuplot gp; K::GnuplotSplot plot; K::GnuplotSplotElementLines floors; K::GnuplotSplotElementColorPoints nodes; K::GnuplotSplotElementLines edges; public: PaperPlot() { floors.setLineWidth(2); plot.add(&edges); plot.add(&nodes); plot.add(&floors); nodes.setPointSize(0.7); edges.setColorHex("#555555"); gp << "set ticslevel 0\n"; //gp << "set zrange [0:0]\n"; } void show() { gp.draw(plot); gp.flush();; } /** add all obstacles of the given floor to the provided height */ void addFloor(const Floor& f, const LengthF height) { // add each wall for (const Line2& l : f.getObstacles()) { const K::GnuplotPoint3 p1(l.p1.x, l.p1.y, height.cm()); const K::GnuplotPoint3 p2(l.p2.x, l.p2.y, height.cm()); floors.addSegment(p1, p2); } } /** add the grid to the plot */ template void addGrid(Grid& grid) { // std::set used; // get the min/max value float max = -999999; float min = +999999; for (const T& n1 : grid) { const float val = n1.imp; //const float val = n1.distToTarget; if (val > max) {max = val;} if (val < min) {min = val;} } gp << "set cbrange["< void debugGrid(Grid& grid, const BBox3& bbox, const bool addNodes, const bool addEdges) { std::set used; for (T& n1 : grid) { if (bbox.contains(n1)) { const K::GnuplotPoint3 p1(n1.x_cm, n1.y_cm, n1.z_cm); if (addNodes) { nodes.add(p1, 0); } if (addEdges) { for (const T& n2 : grid.neighbors(n1)) { if (n1.z_cm == n2.z_cm) {continue;} // speedup if (used.find(n2.getIdx()) == used.end()) { const K::GnuplotPoint3 p2(n2.x_cm, n2.y_cm, n2.z_cm); edges.addSegment(p1, p2); } } used.insert(n1.getIdx()); // for (const T& n2 : grid.neighbors(n1)) { // const uint64_t idx = n1.getIdx() * n2.getIdx(); // if (used.find(idx) == used.end()) { // const K::GnuplotPoint3 p2(n2.x_cm, n2.y_cm, n2.z_cm); // edges.addSegment(p1, p2); // used.insert(idx); // } // } } } } } }; #endif // PAPERPLOT_H