-
Notifications
You must be signed in to change notification settings - Fork 0
/
MapData.h
223 lines (181 loc) · 11.9 KB
/
MapData.h
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
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
//----------------------------------------------------------------------------//
// *** ДВИЖОК ГЕОИНФОРМАЦИОННОЙ СИСТЕМЫ *** //
// //
// Файл MapData.h //
// //
// *** TMAPDATA КАРТОГРАФИЧЕСКИЕ ДАННЫЕ *** //
// //
// Автор ГЛУЩЕНКО Сергей //
// //
// Москва //
//----------------------------------------------------------------------------//
#ifndef MapDataH
#define MapDataH
#include <QTextStream>
#include "Frame.h"
#include "Layer.h"
class TMapData
{
private:
bool ShowFrame; //Рамку карты рисовать или нет
bool ShowGrid15; //15-градусную сетку рисовать или нет
//Рамка карты и 15-градусная сетка
TFrame* Frame;
//Набор слоев
std::vector<TLayer*> Layers;
//Тип описывает пару объектов "перо" и "заливка"
struct PenBrush
{
PenBrush() : Pen(NULL), Brush(NULL) {}
QPen* Pen;
QBrush* Brush;
};
typedef struct PenBrush TPenBrush;
//Считывает заголовок файла
bool ReadHeader(QTextStream *mif);
//Доходит курсором файла до заголовка геометрического объекта (полилиния, регион)
void FindGeometryObj(QTextStream *mif, int *type, int *size);
//Считывает целое число
int ReadInt(QTextStream *mif);
//Считывает точки одного контура или одной полининии
TMultitude::TSpot ReadPoints(QTextStream *mif, int quantity);
//Считывает параметры пера
void ReadPen(QTextStream *mif, int *WidthMI, int *PatternMI, int *ColorMI);
//Считывает параметры заливки
void ReadBrush(QTextStream *mif, int *PatternMI, int *ColorMI);
public:
//Тип описывает список слоев (не сами слои)
struct OneLayer
{
OneLayer() : Name(""), Visible(false) {}
std::string Name;
bool Visible;
};
typedef std::vector<struct OneLayer> TLayerList;
//Тип описывает возвращаемый из карты список объектов
struct Obj
{
Obj() : LayerName(""), ObjID(0), ObjName("") {}
std::string LayerName; //Имя слоя
unsigned int ObjID; //Идентификатор объекта в указанном слое
std::string ObjName; //Имя объекта
};
typedef std::vector<struct Obj> TObjList;
TMapData(void);
virtual ~TMapData(void);
//Возвращает строку всплывающей подсказки, используя данные под курсором
QString GetStringHintUnderCursor(QList<QGraphicsItem *> Arr);
//Возвращает список объектов, используя данные под курсором
TObjList GetObjListUnderCursor(QList<QGraphicsItem *> Arr);
//Быстро перерисовать картографические данные
void RePaint(void);
//Перерисовать картографические данные путем удаления и создания объектов слоев
void CoolRePaint(void);
//Устанавливает признаки отображения тех или иных типов картографических данных
void WhatIsShow(bool _Frame, bool _Grid15);
//Возвращает список слоев
TLayerList GetLayerList(void);
//Найти слой, обратившись к нему по имени
int FindLayer(std::string Name);
//Показать слой, обратившись к нему по имени
bool ShowLayer(std::string Name);
//Скрыть слой, обратившись к нему по имени
bool HideLayer(std::string Name);
//Добавить новый слой, задав ему имя
bool AddLayer(std::string Name);
//Удалить существующий слой, обратившись к нему по имени
bool DelLayer(std::string Name);
//Удаляет все пользовательские слои и перерисовывает карту
void DelAllUserLayers(void);
//Добавить новый слой, создав его из MIF-файла формата MapInfo
// На вход подаются:
// - имя слоя;
// - путь и имя MIF-файла.
// На выходе можно получить:
// - true в случае успешного выполнения процедуры;
// - false в случае какой-либо ошибки
bool AddLayerFromMIF(std::string LayerName, std::string FilePathName);
//Добавить новый слой, содержащий данные по часто перерисовываемым точечным объектам
// На выходе можно получить:
// - true в случае успешного выполнения процедуры;
// - false в случае какой-либо ошибки
bool AddLayerDynamicPoint(void);
//Возвращает минимальное свободное значение идентификатора для размещения нового объекта в слое
// Обращается к слою по имени
// На выходе можно получить:
// - свободное значение идентификатора объекта
unsigned int GetFreeID(std::string Name);
//Возвращает список заголовков объектов в существующем слое. Обращается к слою по имени
// На вход подаются:
// - имя слоя.
// На выходе можно получить:
// - список заголовков объектов в указанном слое
TLayer::THeadersObjects GetObjList(std::string Name);
//Добавляет в слой с динамическими точками новый объект
// !!! Добавление объекта в слой не вызывает перерисовку слоя. Следует пользоваться методом RePaint !!!
// На вход подаются:
// - идентификатор объекта;
// - описание объекта;
// - геодезические координаты объекта "точка" на эллипсоиде ПЗ-90 [рад];
// - код цвета MapInfo.
// На выходе можно получить:
// - true в случае успешного выполнения процедуры;
// - false в случае какой-либо ошибки
bool AddInDynamicPoint(unsigned int ID, std::string Comment, TMultitude::TOnePoint Point, int ColorMI);
//Быстро сдвигает объект в слое с динамическими точками
// На вход подаются:
// - идентификатор объекта;
// - описание объекта;
// - геодезические координаты объекта "точка" на эллипсоиде ПЗ-90 [рад]
void MoveInDynamicPoint(unsigned int ID, std::string Comment, TMultitude::TOnePoint Point);
//Добавляет в существующий слой объект типа "точка". Обращается к слою по имени
// !!! Добавление объекта в слой не вызывает перерисовку слоя. Следует пользоваться методом RePaint !!!
// На вход подаются:
// - имя слоя;
// - идентификатор объекта;
// - наименование объекта;
// - тип символа, изображающего объект "точка";
// - геодезические координаты объекта "точка" на эллипсоиде ПЗ-90 [рад];
// - перо для рисования объекта "точка";
// - заливка для рисования объекта "точка".
// На выходе можно получить:
// - true в случае успешного выполнения процедуры;
// - false в случае какой-либо ошибки
bool AddPointInLayer(std::string Name, unsigned int ID, std::string ObjName, TLayer::TTypeSymbol Type,
TMultitude::TOnePoint Point, QPen Pen, QBrush Brush);
//Добавляет в существующий слой объект типа "полилиния". Обращается к слою по имени
// !!! Добавление объекта в слой не вызывает перерисовку слоя. Следует пользоваться методом RePaint !!!
// На вход подаются:
// - имя слоя;
// - идентификатор объекта;
// - наименование объекта;
// - геодезические координаты узловых точек полилинии на эллипсоиде ПЗ-90 [рад];
// - перо для рисования объекта "полилиния".
// На выходе можно получить:
// - true в случае успешного выполнения процедуры;
// - false в случае какой-либо ошибки
bool AddPolyLineInLayer(std::string Name, unsigned int ID, std::string ObjName, TMultitude::TSpot Spot, QPen Pen);
//Добавляет в существующий слой объект типа "регион". Обращается к слою по имени
// !!! Добавление объекта в слой не вызывает перерисовку слоя. Следует пользоваться методом RePaint !!!
// На вход подаются:
// - имя слоя;
// - идентификатор объекта;
// - наименование объекта;
// - геодезические координаты узловых точек региона на эллипсоиде ПЗ-90 [рад];
// - перо для рисования объекта "регион";
// - заливка для рисования объекта "регион".
// На выходе можно получить:
// - true в случае успешного выполнения процедуры;
// - false в случае какой-либо ошибки
bool AddRegionInLayer(std::string Name, unsigned int ID, std::string ObjName, TMultitude::TSpot Spot, QPen Pen, QBrush Brush);
//Удаляет объект любого типа из существующего слоя. Обращается к слою по имени
// На вход подаются:
// - имя слоя;
// - идентификатор объекта.
// На выходе можно получить:
// - true в случае успешного выполнения процедуры;
// - false в случае какой-либо ошибки
bool DelObjFromLayer(std::string Name, unsigned int ID);
void* OWNER; //Обязателен к заполнению
};
#endif