1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
/**
*
* This file is part of Tulip (https://tulip.labri.fr)
*
* Authors: David Auber and the Tulip development Team
* from LaBRI, University of Bordeaux
*
* Tulip is free software; you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation, either version 3
* of the License, or (at your option) any later version.
*
* Tulip is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details.
*
*/
#include "GlMatrixBackgroundGrid.h"
#include <tulip/Graph.h>
#include <tulip/GlLine.h>
#include "MatrixView.h"
using namespace std;
namespace tlp {
GlMatrixBackgroundGrid::GlMatrixBackgroundGrid(MatrixView *view) : _view(view) {}
BoundingBox GlMatrixBackgroundGrid::getBoundingBox() {
int N = _view->graph()->numberOfNodes();
BoundingBox result;
result.expand(Coord(0, 0, 0));
result.expand(Coord(1 + N, -1 - N, 0));
return result;
}
void GlMatrixBackgroundGrid::draw(float lod, tlp::Camera *camera) {
Vector<int, 4> viewPort = camera->getViewport();
Coord topLeft(camera->viewportTo3DWorld(Coord(viewPort[0] + viewPort[2], viewPort[1], 0))),
bottomRight(camera->viewportTo3DWorld(Coord(viewPort[0], viewPort[1] + viewPort[3], 0)));
GridDisplayMode mode = _view->gridDisplayMode();
if (mode == SHOW_NEVER || (mode == SHOW_ON_ZOOM && abs(bottomRight[0] - topLeft[0]) > 50))
return;
int N = _view->graph()->numberOfNodes();
double startX = max<double>(0.5, floor(topLeft[0]) - 0.5),
startY = min<double>(-0.5, ceil(topLeft[1]) + 0.5),
endX = min<double>(0.5 + N, ceil(bottomRight[0]) + 0.5),
endY = max<double>(-0.5 - N, floor(bottomRight[1]) - 0.5);
for (double x = startX; x <= endX; ++x) {
vector<Coord> points(2);
points[0] = Coord(x, startY, 0);
points[1] = Coord(x, endY, 0);
vector<Color> colors(2);
colors[0] = Color(0, 0, 0);
colors[1] = Color(0, 0, 0);
GlLine line(points, colors);
line.draw(lod, camera);
}
for (double y = startY; y >= endY; --y) {
vector<Coord> points(2);
points[0] = Coord(startX, y, 0);
points[1] = Coord(endX, y, 0);
vector<Color> colors(2);
colors[0] = Color(0, 0, 0);
colors[1] = Color(0, 0, 0);
GlLine line(points, colors);
line.draw(lod, camera);
}
}
} // namespace tlp
|