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
|
/**
*
* This file is part of Tulip (www.tulip-software.org)
*
* 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 tlp;
using namespace std;
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->screenTo3DWorld(Coord(viewPort[0]+viewPort[2],viewPort[1],0))),
bottomRight(camera->screenTo3DWorld(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);
}
}
|