source: subversion/applications/editors/osm-editor/qt3/Canvas.cpp @ 16590

Last change on this file since 16590 was 1158, checked in by nick, 14 years ago

moved current version to qt3 directory in preparation for qt4

File size: 2.9 KB
Line 
1/*
2    Copyright (C) 2005 Nick Whitelegg, Hogweed Software, nick@hogweed.org
3
4    This program is free software; you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation; either version 2 of the License, or
7    (at your option) any later version.
8
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13
14    You should have received a copy of the GNU General Public License
15    along with this program; if not, write to the Free Software
16    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111 USA
17
18 */
19#include "Canvas.h"
20#include "functions.h"
21#include "llgr.h"
22#include <cstdlib>
23#include <sstream>
24
25using namespace OpenStreetMap;
26
27Canvas::Canvas(double e, double n, double scale,
28                        int w,int h,int sr) : map (e,n,scale, w,h) 
29{
30        image=gdImageCreateTrueColor(w,h);
31        backg=gdImageColorAllocate(image,220,220,220);
32        gdImageFilledRectangle(image,0,0,w,h,backg);
33        shadingres=sr;
34        map.setGridRef(true);
35}
36
37Canvas::~Canvas()
38{
39        gdImageDestroy(image);
40}
41
42
43void Canvas::draw()
44{
45        SRTMConGen congen(map,1);
46        if(shadingres>0)
47                congen.generateShading(this,shadingres);
48        else
49                congen.generate(this);
50        drawCoast();
51        gdImagePng(image,stdout);
52
53}
54
55void Canvas::drawCoast()
56{
57        try
58        {
59                EarthPoint bottomLeft = gr_to_ll(map.getBottomLeft()),
60                                   topRight = gr_to_ll(map.getTopRight());
61
62                vector<vector<EarthPoint> > coastSegs=readcoast("data/coast",
63                                                                bottomLeft, topRight);
64                int blue = gdImageColorAllocate(image,0,0,255);
65                ScreenPos pt1, pt2;
66
67                for(int seg=0; seg<coastSegs.size(); seg++)
68                {
69                        if(!coastSegs[seg].empty())
70                        {
71                                pt1 = map.getScreenPos(ll_to_gr(coastSegs[seg][0]));
72                                for(int pt=1; pt<coastSegs[seg].size(); pt++)
73                                {
74                                        pt2 = map.getScreenPos(ll_to_gr(coastSegs[seg][pt]));
75                                        gdImageLine(image,pt1.x,pt1.y,pt2.x,pt2.y,blue);
76                                        pt1 = pt2;
77                                }
78                        }
79                }
80        }
81        catch (string e)
82        {
83                cerr<<"WARNING - UNABLE TO DRAW COAST: " << e<<endl;
84        }
85}
86       
87void Canvas::drawContour(int x1,int y1,int x2,int y2,int r,int g,int b)
88{
89        int colour=gdImageColorAllocate(image,r,g,b);
90        gdImageLine(image,x1,y1,x2,y2,colour);
91        gdImageSetThickness(image,1);
92}
93
94void Canvas::drawAngleText(int fontsize,double angle,int x,int y,int r,int g,
95                                                        int b,char* text)
96{
97        int brect[8];
98        int colour=gdImageColorAllocate(image,r,g,b);
99        gdImageStringFT(image, brect,colour, "data/luxisr.ttf",fontsize, 
100                                        angle, x, y, text);
101}
102
103void Canvas::heightShading(int x1,int y1,int x2,int y2,int x3,int y3,
104                                                        int x4,int y4,int r,int g,int b)
105{
106        gdPoint points[4];
107        points[0].x=x1;
108        points[0].y=y1;
109        points[1].x=x2;
110        points[1].y=y2;
111        points[2].x=x3;
112        points[2].y=y3;
113        points[3].x=x4;
114        points[3].y=y4;
115        gdImageFilledPolygon(image, points, 4, gdImageColorAllocate (image,r,g,b));
116}
Note: See TracBrowser for help on using the repository browser.