2002-07-06 00:33:05 +00:00
|
|
|
/***************************************************************************
|
|
|
|
qgsmapcanvas.cpp - description
|
|
|
|
-------------------
|
|
|
|
begin : Sun Jun 30 2002
|
|
|
|
copyright : (C) 2002 by Gary E.Sherman
|
|
|
|
email : sherman@mrcc.com
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
|
|
* *
|
|
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
|
|
* it under the terms of the GNU General Public License as published by *
|
|
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
|
|
* (at your option) any later version. *
|
|
|
|
* *
|
|
|
|
***************************************************************************/
|
|
|
|
#include <qstring.h>
|
2002-07-19 07:57:30 +00:00
|
|
|
#include <qpainter.h>
|
|
|
|
#include <qrect.h>
|
|
|
|
#include "qgsrect.h"
|
2002-07-06 00:33:05 +00:00
|
|
|
#include "qgsmaplayer.h"
|
2002-07-19 07:57:30 +00:00
|
|
|
#include "qgsdatabaselayer.h"
|
2002-07-06 00:33:05 +00:00
|
|
|
#include "qgsmapcanvas.h"
|
|
|
|
|
|
|
|
QgsMapCanvas::QgsMapCanvas(QWidget *parent, const char *name ) : QWidget(parent,name) {
|
2002-07-19 07:57:30 +00:00
|
|
|
mapWindow = new QRect();
|
2002-07-06 00:33:05 +00:00
|
|
|
}
|
|
|
|
QgsMapCanvas::~QgsMapCanvas(){
|
2002-07-19 07:57:30 +00:00
|
|
|
delete mapWindow;
|
2002-07-06 00:33:05 +00:00
|
|
|
}
|
2002-07-11 05:00:18 +00:00
|
|
|
void QgsMapCanvas::addLayer(QgsMapLayer *lyr){
|
2002-07-19 07:57:30 +00:00
|
|
|
layers[lyr->name()] = lyr;
|
|
|
|
// update extent if warranted
|
|
|
|
if(layers.size() == 1){
|
|
|
|
fullExtent = lyr->extent();
|
|
|
|
}
|
2002-07-12 17:51:17 +00:00
|
|
|
// set zpos to something...
|
|
|
|
//lyr->zpos = 0;
|
|
|
|
}
|
|
|
|
void QgsMapCanvas::render(){
|
2002-07-19 07:57:30 +00:00
|
|
|
QPainter *paint = new QPainter();
|
|
|
|
paint->begin(this);
|
|
|
|
currentExtent = fullExtent;
|
|
|
|
mapWindow->setLeft(currentExtent.xMin());
|
|
|
|
mapWindow->setBottom(currentExtent.yMin());
|
2002-07-19 16:52:26 +00:00
|
|
|
|
2002-07-19 07:57:30 +00:00
|
|
|
// determine the dominate direction for the mapcanvas
|
|
|
|
if (width () > height ())
|
|
|
|
{
|
|
|
|
mapWindow->setWidth(currentExtent.width());
|
|
|
|
mapWindow->setHeight(currentExtent.width());
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
mapWindow->setWidth(currentExtent.height());
|
|
|
|
mapWindow->setHeight(currentExtent.height());
|
|
|
|
}
|
2002-07-19 16:52:26 +00:00
|
|
|
|
2002-07-19 07:57:30 +00:00
|
|
|
paint->setWindow(*mapWindow);
|
2002-07-19 16:52:26 +00:00
|
|
|
|
2002-07-19 07:57:30 +00:00
|
|
|
QRect v = paint->viewport ();
|
|
|
|
int d = QMIN (v.width (), v.height ());
|
|
|
|
int dm = QMAX(v.width(), v.height());
|
|
|
|
paint->setViewport (v.left () + (v.width () - d) / 2,
|
|
|
|
v.top () + (v.height () - d) / 2, d, d);
|
|
|
|
|
2002-07-12 17:51:17 +00:00
|
|
|
// render all layers in the stack, starting at the base
|
2002-07-19 07:57:30 +00:00
|
|
|
map<QString,QgsMapLayer *>::iterator mi = layers.begin();
|
|
|
|
int yTransform = mapWindow->bottom() - abs(mapWindow->height() - currentExtent.height())/2;
|
|
|
|
while(mi != layers.end()){
|
|
|
|
QgsMapLayer *ml = (*mi).second;
|
|
|
|
// QgsDatabaseLayer *dbl = (QgsDatabaseLayer *)&ml;
|
|
|
|
ml->draw(paint, ¤tExtent, yTransform);
|
|
|
|
mi++;
|
|
|
|
// mi.draw(p, &fullExtent);
|
|
|
|
}
|
|
|
|
paint->end();
|
2002-07-11 05:00:18 +00:00
|
|
|
}
|