classes to support map canvas rendering

git-svn-id: http://svn.osgeo.org/qgis/trunk@38 c8812cc2-4d05-0410-92ff-de0c093fc19c
This commit is contained in:
gsherman 2002-07-25 03:45:27 +00:00
parent 2cce60a846
commit 6add40a8b2
10 changed files with 168 additions and 8 deletions

View File

@ -1,6 +1,6 @@
#############################################################################
# Makefile for building: qgis
# Generated by qmake (1.03a) on: Sat Jul 20 08:36:25 2002
# Generated by qmake (1.03a) on: Wed Jul 24 19:25:43 2002
# Project: src.pro
# Template: app
# Command: $(QMAKE) src.pro
@ -53,7 +53,8 @@ HEADERS = qgsdbsourceselectbase.ui.h \
qgstable.h \
qgsdbsourceselect.h \
qgsnewconnection.h \
qgsrect.h
qgsrect.h \
qgspoint.h
SOURCES = main.cpp \
qgisapp.cpp \
qgsdatabaselayer.cpp \
@ -63,7 +64,8 @@ SOURCES = main.cpp \
qgsrasterlayer.cpp \
qgsdbsourceselect.cpp \
qgsnewconnection.cpp \
qgsrect.cpp
qgsrect.cpp \
qgspoint.cpp
OBJECTS = main.o \
qgisapp.o \
qgsdatabaselayer.o \
@ -74,6 +76,7 @@ OBJECTS = main.o \
qgsdbsourceselect.o \
qgsnewconnection.o \
qgsrect.o \
qgspoint.o \
qgsdbsourceselectbase.o \
qgisappbase.o \
qgsnewconnectionbase.o
@ -210,6 +213,8 @@ qgsnewconnection.o: qgsnewconnection.cpp qgsnewconnection.h \
qgsrect.o: qgsrect.cpp qgsrect.h
qgspoint.o: qgspoint.cpp qgspoint.h
qgsdbsourceselectbase.h: qgsdbsourceselectbase.ui
$(UIC) qgsdbsourceselectbase.ui -o qgsdbsourceselectbase.h

View File

@ -100,6 +100,8 @@ QgisApp::addLayer ()
++it;
}
qApp->processEvents();
mapCanvas->render();
}

View File

@ -203,7 +203,7 @@
<data format="XPM.GZ" length="661">789cd3d7528808f055d0d2e72a2e492cc94c5648ce482c52d04a29cdcdad8c8eb5ade6523232520022630543251d2e253d856405bffcbc54105b19c8563600020b03103711c44d0303b04aac005546593911b74ce2d09151c60089046512a100641a14109419789f522203f6082e19385ba9d69a0b008e2682ef</data>
</image>
<image name="image5">
<data format="XPM.GZ" length="5806">789c5d58c76e253b0eddf75718cd5d63a0573960300be79c730f6641aaaaeceb1caee3c3fcfb8887d7e32ed5e9067c4c8a922806c97ffd9a3bdbdb9efbf5d78fe7294f277ece5ff2d3dcafeee5f6f6e3dffff9d7df3f7e66d99cfe6b8bb9ece73f7efcdc9fcef9b99dfbbb5e89a34028c107be30e6f410c939e28bca077ce0b7917c3eb217cd273bd1f89b483e19cbe931b22fcab35e01b98be49f63ce5534df75a4bf13e9ef47f3df47f2f9b19cf7c6dc3f46f203e5be50807f46ebf988ece33cea4101be1bd9ab95f79d02e3db687c83f90605f84734fe4a79890ffe863ffa41017b9017b902fb5f57ded40a8cbf847ea3c0f8c81f12ed8f2fc05305f821ecb50af0f7687cb45f417c74ad021cfe193205c60fe08d02f2ab687e8ba75c0179745edc47e77dae5c2a05e4f06f3b28203f1b9f279d627d8302fc04f60a05e6cba3f9903f65a280bc88e63f8ef68ffc6251e07cb69557990272c46b5f28c04b8c6705ec1d45f67f63bd5e017b587fd52b205f86bc50802fc13e3ec4f710ede768bc1e5ac3f98a0272e42bccc39fb432f62f1d8ecf93acbe540aeca71ac7a7bf88f6b38af3a914e00bd1795bfeb102bc1ec7af473c0fa2801cf5a42e14e0c8a79e15d07f8af63fc57e7205e647fc75a502fa93b17d42bef954018efce97305e6bb1be73f81379502f3a11e0b3ee8b7e3fcf251fc13f2877305f4e16fa915904fc6e72d88df5e14e088c72e55809f8ef3cdbbc87f88076915903f47eb413c37f8a08ff386393b5f8ae21fe7eb6b05f859e4fff5e8fc517f3c3ed8bb8ee6bf1cdbf31cc90fc6f129e7517d97687d88676cd7e21df9d5d60ac879bc3e413ed5ac40fe21be5baf00477c369d02f6e08f365180c39f4da6803de46bdd2b30be8cea15f2455205e4cd787e427fe04e017be8ff955760beb5717d70a8576da180fc7cac4fa80f6da9803df4cfb256401ff953150ad8437cd59902e3d10f1a56603c8deb25e3fccb5481f1a8af4dae0047fcd5b902fa889f9215901f46f50ef51fe960f5351be73fbd41bf53408ef8403a227e5d3ae6d481d70accefc7fd5950bf9354010eff26b902f165f7af5a01fe0ade28a06ff70556408ef525a200c77e934e81f5219fc364cdecbe837c49d3ac48ac3e61fe345340be31e3d54c1ff5212dd2c2b87ff9e2a9f9e7d578d6dafadcd68c8bad8f71bfc271613e42bf4aab2ffbec8ce76962f106ffa5b502f612e379369363bf69ab80bd3de3999fed1fe799b202e32f8de7f9cc1f88af54f23eb17c368e820cb98df7f990dafe07e3456adc9b7f501021bf335e54a9c59fadaf2f5a5bbf473f4279b6fbd5a6727577827ae0d7bf7866f17c613c17f3aff3c6cbc4ec09d697e183bc335ea6a9c507fc9f150a70c473562ae0bf47e35562e3c5380a0afcb961bc98f957b0ffac5540fe64bcf299ad07fd2f6305e46cbc1a32cba77be3e100ad5ec2df9957403f315e0fb9d96f8d37696ef1837e93754d965b7f41bc7ddfff05f188eb83f977cd7893e7162f27332e85c5dbd28c0f85f50bf3d7c089d527c2f9e4a1da64f67e81fff3b42972ccc777c6dbbeb47a85fb6a1e1c965b3fba31ce5569f1b434e34d69f182fe90e761bfb6bf65e3925b3d64f4c7bc90597d149c6f5e2a20473fcbabaab3fd12fa475e378dddd719e78d7288f364f83fe7362bac1f9a3d5c58601fe79d7b05d687f3ccbbe01fcb278c2f1205ec1d1baf0bb32f383f94038bdf57e375929b7f4be36d65fef2b08ff0340e7f7ebf3718f5b12815b08ffc45bb307b2fc6dbb4b0f35e352e556debb3f951c02137fdbaee6cfd6ecf78d0b7f708fa47d128b01edc4782fbc5f6cfb67e5cf8b11ee427ae4b384f3f3fee4f6edf785316d6bf36c7fd8a500fcb523aebbf928efba3c77da2ec15b067fd35f721c2307e3ae37963f160fdba08729bdf78f9a52fcfe3fee4115f152b307ec5b8af4c9f37c7fd8ed371bf14e403aee7167f85f1b01ebbdfa0fea17c5b7f437dc3f6acdfa07fe17a64f98efb4edd7999ddff902f4daa00c77deefbbee366f71fdfb5767ec85f1c9fed17f9f5c7fb12ebfbbe4f09ead71ff735c407daa9d577eceffbbe4c62bc63b6f70ff215d709db8fddaff1e0823efc25499f0ae40ef541b23e11cb17d8935281f9917f782e59ffb4f751d36762e78ff54adb1782f513f243fabeb4f70323ff90bed67fec7d2a7debedbd617f0fe87befedbe8378efc2ebd4eefb0ef53fa47bd2597ea17e74c39077361ffc1d9ae58c3becfffbfebb3ffd8223c74e9c779debdde02edca59bb82b77ed6ec2ef4935fed40fdab7eeceddbb07f7e89edcb39bba17f7eadedcbbfb709f6ede2dfca9ef16838d3bb7e496dd8a5b756be1e775b7e136c30c6f6ecb6dbb1d1df1a51fb417c2acf7417bd7edb9fda0357107eed01db9e3f0d3963b71a73ae20ffb6afdc19db973f7db252e7599cb5de14a57b9da3561c4c4b5e4fe6f7f8188d82d93907713eaa8a7812ee892267445d77443b7e1b777740fff3db8797a743bf444cf34a5177aa5377aa70ffaa4795aa0455aa2655aa1555aa375f877e2de698336698bb6698776698fb07e3a08b60fe9888ee9844ee98ccee9b7e95342296594534125555453432d3b266696f0e8edc2c375e00bbee409e2e5ca4df89a6ff896eff89e1f82ee63f8cd133ff33468bff02bbff13b7ff027c33fbcc08b18b1c4cbbc32d35ee5355e0fda1bbcc95bbccd3bbccb7bbc0ffd033ee4a3a073cc277c0aed333ee7df413b0957b22ce4551172e78de7d9deb375b8e8b7e23047d016e27361f6e179eba50b8fd0412eb8904bde11ac5faee45a6ee456eed42b722f0fc2f2284ff21cd6b12d53799157b9943779970fe87fcabc2c048fadc8a22cc9b2acc8aafe3140d6c2ff75d9904dd9926dfc79c0eafb8eecca1e9dc8be1cc8a11cc9b19cc8a99cc979d0ff1d2ed9a96416635ff129799014219fabf08468a4f5ceebdf1b82efc3d7c9a6efbf62fe2b7e742e3ff80b7fe927fe2a685f43fbc6dffa3b7fef1f627dff68ebf34f41fbd95fe3e71bdef253cefdcb77067ec733effa57e9fd9b7f87ee47b0fde9e7fdbcbc7f5b1fe7a3aeca2ff8c5b08625bfec57fc34e8074f7dcb63fd30625e3efc1abf8571eb7e63ac0bfdfffef3c7ff00e7f464ef</data>
<data format="XPM.GZ" length="3390">789c759649531c490c85effc8a0e74734cc85595595b4cccc1066f98d52bf6c41cb23668f6a5b10d13f3df27f55e81a11bfae1083ea4cc94944ab59f3f9bec6e6f4c9e3d5fba9c85d9b49db4fbe162f2acbb3a3ebefefb9fbffe5d5aceb249fc49bd9b64cb7f2c2defcc26ed64f3f4a437d03a8224f818cb17706a02ef809d095c824b9371507065827d1b1c4cb00bb831810fc09d09e7af1ac7c32a9eaf3fc169e6931cfe87e0cc04fbaf918bd17f00fbd48ff1d7b79c7ad8b7c959cdf8f466e486f1c9393837c1be0b2eeef6afc82e4d5af823dfb434c1fe96ecb2d13e05d726d8bf92b396f94b060e26d87bb273633d184fe3fa6440fe01dc9a606fc86e48195f4bf629391c833b13ec7b645fa4b83f3d03f7be66fc81e70f26d8af8daddc4901fbd12d67e807edc8ae19eb2be43ce17e82fbccf0813d90f334657f7c067b13f83b38378107729170bda0be5965c27e3b643fd6575e816b13ecebe4a2cd18cf7b7030c1fe8e5c0c19ee43f7c9f10291bf6c815b13ecdfc8e5e0b87f49ae52c7fe9981bb2a73bcdf0d706f02339ec184f53fc89573ec97cb911bcffe3d1879f0a8bf7e24872467bf7d3076499e64bc7fe4e7d2ca3b9ed792eb3e67fdf19e5d2c98637e811c8a9cf95d8c5ce5ec97376017f3657e87e4c615bc2ff49ff38d1f79059c9bc0e8075714dd98af0797550c0076bc6f5799c0e82717eaccb31e29b8318191bf6b4dd80ffdedba581fda0b639f98c017e4d28ffbe33d631cb07f4fc965e2585f47ae0bd64bf0ded19ee41cec4c60bc1f9f9bc0a8572c4631ded716b94e3df3bf223745c9f8d06fbe34c17e422e3bc6af2fc9d19ff317f3ce5726bc47bc8f58fe66cc1ff3ccb726f06b7067823fea9b2726ecbf42ae72cffbfd04c600841def33cf9baea41dfd9f9726ec87f996f726f8e3bcc2b5b1c3c09b23bb8af5c17c297cb4f37cac8fcd37facb1ab83281d12f4530818fc86d31faa35e456702e33d15bd098cfa158309e765e4180fee47101fc637eb8bf784f4f87d83fe2e6b13d6e3fecbae6d2ace63ccd32a3581f1de309ef8de8ec86d57737ff41bae8ff1e3fba0aa4d60ccdbaa3381319feac604c679f83a65ff246067c2796be42e04e41fd05f2137c11ffd1d0613fc316f9ba44f1b7edfbd00677dd2b0fee4dc04c67b6b2a13fc67e43e6b78ff980f4dddfb86f303fdd4f47dde327ff43f9e2fe3c5bc6e9bbe6e397ff17edbbe6f5bee87f7dff921363018f3303ef7a4e3fb42fedd30b88ee761dec62fcb5bc63c1df031de993d948a066db4d54e7b1d1edae6fd754ff775aa077aa8477aac277aaa677afe947ff4bed04b9de995fe88bfffd45f7aad435c71f384ff7ef47ea12f75257add45127fbfd1d545ffb8e3545fe96b7da36f1772bae1fa07feefe2ee6bfa7e3ec7db5316fcd7754337754bb71ff3ff1d4f8cef5c77f4837ed44ffa59bfe857ddbd1fff23fedff4bb269a6aa64ebde65a68a9d5786a2d3a5f4f1d44244823ad74d26b2977bb47ef3dd997e97c3db1e2400ee568cefb584ee454cee47cbe9e71c5855ccaec81f795fc909ff24baee586673ca88f9d71dffb85bc9415599557f23aae786367ccddef9db7bc9577b216e33893f7b22e1bd17b53b664fbb1fee4ee71ff9df8ef837c944ff259bed85fb47ecaff2ea6afb22bdfe4fb427dea27fc1349e3fed9a2ffe28ae8edc44b2e8594f3fe5cf17b0de277b1f255ace6bd9deec71f5456838460bea189ff01684317ba5895f2717fdb35f461101ff6c27e984a15fd0f1ec6b9581fd90e87328deb8ec2f1624ecbfffdb9f43f0b1c269c</data>
</image>
</images>
<connections>

View File

@ -0,0 +1,13 @@
#include "qgspoint.h"
#include "qgscoordinatetransform.h"
QgsCoordinateTransform::QgsCoordinateTransform(double mupp=0, double ymax = 0, double ymin=0, double xmin = 0) :
mapUnitsPerPixel(mupp), yMax(ymax), yMin(ymin), xMin(xmin){
}
QgsCoordinateTransform::~QgsCoordinateTransform(){
}
QgsPoint QgsCoordinateTransform::transform(QgsPoint p){
}
QgsPoint QgsCoordinateTransform::transform(double x, double y){
}

View File

@ -0,0 +1,18 @@
#ifndef QGSCOORDINATETRANSFORM_H
#define QGSCOORDINATETRANSFORM_H
class QgsPoint;
class QgsCoordinateTransform{
public:
QgsCoordinateTransform();
~QgsCoordinateTransform();
QgsPoint transform(QgsPoint p);
QgsPoint transform(double x, double y);
private:
double mapUnitsPerPixel;
double yMax;
double yMin;
double xMin;
};
#endif // QGSCOORDINATETRANSFORM_H

View File

@ -20,12 +20,15 @@
#include "qgsrect.h"
#include "qgsmaplayer.h"
#include "qgsdatabaselayer.h"
#include "qgscoordinatetransform.h"
#include "qgsmapcanvas.h"
QgsMapCanvas::QgsMapCanvas(QWidget *parent, const char *name ) : QWidget(parent,name) {
mapWindow = new QRect();
coordXForm = new QgsCoordinateTransform();
}
QgsMapCanvas::~QgsMapCanvas(){
delete coordXForm;
delete mapWindow;
}
void QgsMapCanvas::addLayer(QgsMapLayer *lyr){
@ -34,10 +37,23 @@ void QgsMapCanvas::addLayer(QgsMapLayer *lyr){
if(layers.size() == 1){
fullExtent = lyr->extent();
}
render();
// set zpos to something...
//lyr->zpos = 0;
}
void QgsMapCanvas::render2(){
QPainter *paint = new QPainter();
paint->begin(this);
currentExtent = fullExtent;
QRect v = paint->viewport();
// calculate the translation and scaling parameters
if(currentExtent.height() > currentExtent.width())
m_mupp = currentExtent.height()/v.height();
else
m_mupp = currentExtent.width()/v.width();
coordXForm->
}
void QgsMapCanvas::render(){
QPainter *paint = new QPainter();
paint->begin(this);

View File

@ -22,7 +22,7 @@
#include <qevent.h>
#include "qgsrect.h"
class QRect;
class QgsCoordinateTransform;
class QgsMapLayer;
/*! \class QgsMapCanvas
@ -43,6 +43,8 @@ public:
/*! Draw the map using the symbology set for each layer
*/
void render();
void render2();
double mupp();
private:
void paintEvent(QPaintEvent *pe);
//! map containing the layers by name
@ -52,6 +54,9 @@ public:
//! Current extent
QgsRect currentExtent;
QRect *mapWindow;
QgsCoordinateTransform *coordXForm;
double m_mupp;
};
#endif

40
src/qgspoint.cpp Normal file
View File

@ -0,0 +1,40 @@
#include "qgspoint.h"
QgsPoint::QgsPoint(){
}
QgsPoint::QgsPoint(double x, double y) : m_x(x), m_y(y){
}
QgsPoint::~QgsPoint(){
}
double QgsPoint::x() const {
return m_x;
}
double QgsPoint::y() const {
return m_y;
}
bool QgsPoint::operator==(const QgsPoint &other){
if((m_x == other.x()) && (m_y == other.y()))
return true;
else
return false;
}
bool QgsPoint::operator!=(const QgsPoint &other){
if((m_x == other.x()) && (m_y == other.y()))
return false;
else
return true;
}
QgsPoint & QgsPoint::operator=(const QgsPoint &other){
if(&other != this){
m_x = other.x();
m_y = other.y();
}
return *this;
}

57
src/qgspoint.h Normal file
View File

@ -0,0 +1,57 @@
#ifndef QGSPOINT_H
#define QGSPOINT_H
class QString;
class QgsPoint {
private:
//! x coordinate
double m_x;
//! y coordinate
double m_y;
public:
/// Default constructor
QgsPoint();
/*! Create a point from x,y coordinates
* @param x x coordinate
* @param y y coordinate
*/
QgsPoint(double x, double y);
~QgsPoint();
/*! Sets the x value of the point
* @param x x coordinate
*/
void setX(double x);
/*! Sets the y value of the point
* @param y y coordinate
*/
void setY(double y);
/*! Get the x value of the point
* @return x coordinate
*/
double x() const;
/*! Get the y value of the point
* @return y coordinate
*/
double y(void) const;
//! equality operator
bool operator==(const QgsPoint &other);
//! Inequality operator
bool operator!=(const QgsPoint &other);
/// Assignment
QgsPoint & operator=(const QgsPoint &other);
};
inline bool operator==(const QgsPoint &p1, const QgsPoint &p2){
if((p1.x() == p2.x()) && (p1.y() == p2.y()))
return true;
else
return false;
}
#endif //QGSPOINT_H

View File

@ -20,7 +20,9 @@ HEADERS += qgsdbsourceselectbase.ui.h \
qgstable.h \
qgsdbsourceselect.h \
qgsnewconnection.h \
qgsrect.h
qgsrect.h \
qgspoint.h \
qgscoordinatetransorm.h
INTERFACES += qgsdbsourceselectbase.ui qgisappbase.ui qgsnewconnectionbase.ui
SOURCES += main.cpp \
@ -32,4 +34,6 @@ SOURCES += main.cpp \
qgsrasterlayer.cpp \
qgsdbsourceselect.cpp \
qgsnewconnection.cpp \
qgsrect.cpp
qgsrect.cpp \
qgspoint.cpp \
qgscoordinatetransform.cpp