source: subversion/applications/editors/osm-editor/qt3/Components2.h @ 32040

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

moved current version to qt3 directory in preparation for qt4

File size: 3.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 Lesser 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#ifndef FREEMAP_COMPONENT_H
20#define FREEMAP_COMPONENT_H
21
22#include "Node.h"
23#include "Segment.h"
24#include "Way.h"
25#include <qtextstream.h>
26#include <vector>
27#include <utility>
28using std::vector;
29
30namespace OpenStreetMap
31{
32
33
34class Components2
35{
36private:
37        vector<Node*> nodes;
38        vector<Segment*> segments;
39        vector<Way*> ways;
40        vector<Area*> areas;
41        vector<TrackPoint*> trackpoints;
42        int nextNodeId, nextSegId;
43
44        int minNodeID();
45        int minSegID();
46
47public:
48        Components2() { nextNodeId = nextSegId = -1; }
49        void destroy();
50
51        Node *addNewNode(double lat, double lon, const QString& name, 
52                                        const QString& type, const QString& timestamp="")
53        {
54                return addOSMNode(nextNodeId--,lat,lon,name,type,timestamp);
55        }
56
57        Node *addOSMNode(int id,double lat, double lon, const QString& name, 
58                                        const QString& type,const QString& timestamp="");
59
60        void addNode (Node *n)
61        {
62                if(!nodeExists(n->getOSMID()))
63                        nodes.push_back(n);
64        }
65
66        void addSegment (Segment *s)
67        {
68                if(!segmentExists(s->getOSMID()))
69                        segments.push_back(s);
70        }
71
72        Node *getNearestNode (double lat, double lon,double);
73        int getNearestTrackPoint (double lat, double lon,double);
74        Segment *getNearestSegment (double lat, double lon,double);
75        vector<Node*> getNearestNodes (double lat, double lon, double limit);
76
77        Segment * addNewSegment (Node *n1, Node *n2) 
78        {
79                return addOSMSegment(nextSegId--,n1,n2);
80        }
81
82        Segment * addOSMSegment (int id,Node *n1, Node *n2);
83
84
85        Way *getWayByID(int id);
86        Segment *getSegmentByID(int id);
87        Segment *getSeg(vector<Node*>& n1, vector<Node*>& n2);
88        vector<Segment*> getSegs(Node*);
89
90        bool merge(Components2 *comp);
91
92        void toOSM(QTextStream &strm,bool);
93        void removeTrackPoints();
94
95        bool deleteNode(Node*);
96        bool deleteSegment(Segment*);
97        bool deleteWay(Way*);
98        void deleteTrackPoints(int,int);
99        EarthPoint getAveragePoint(); 
100        EarthPoint getAverageTrackPoint(); 
101
102        QByteArray getNewNodesXML();
103        QByteArray getNewSegmentsXML();
104        vector<Node*> getNewNodes();
105        vector<Segment*> getNewSegments();
106
107        // 130506 removed hacky crap for doing multiple nodes/segs at once - the
108        // scheduler should now handle this (at least it has been so far....)
109       
110        void addWay (Way *w)
111        {
112                cerr<<"*****ADDING WAY TO COMPONENTS*****"<<endl;
113                if(!wayExists(w->getOSMID()))
114                        ways.push_back(w);
115                cerr<<ways.size()<<endl;
116        }
117
118        void addArea (Area *a)
119        {
120                if(!areaExists(a->getOSMID()))
121                        areas.push_back(a);
122        }
123
124        std::pair<Segment*,Segment*>* breakSegment(Segment *s, Node *newNode);
125        void toGPX(QTextStream& stream);
126        vector<Node*> getWaypoints();
127
128        TrackPoint *addTrackPoint(double lat, double lon,
129                                const QString& timestamp);
130
131        bool nodeExists(int);
132        bool segmentExists(int);
133        bool wayExists(int);
134        bool areaExists(int);
135
136        TrackPoint *getTrackPoint(int i) { return trackpoints[i]; }
137        Node *getNode(int i) { return nodes[i]; }
138        Segment *getSegment(int i) { return segments[i]; }
139        Way *getWay(int i) { return ways[i]; }
140        Area *getArea(int i) { return areas[i]; }
141
142        int nNodes() { return nodes.size(); }
143        int nSegments() { return segments.size(); }
144        int nWays() { return ways.size(); }
145        int nAreas() { return areas.size(); }
146        int nTrackPoints() { return trackpoints.size(); }
147};
148
149
150} 
151
152#endif // FREEMAP_COMPONENT_H
Note: See TracBrowser for help on using the repository browser.