SUMO - Simulation of Urban MObility
Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Groups
Pages
GUISettingsHandler.cpp
Go to the documentation of this file.
1
/****************************************************************************/
10
// The dialog to change the view (gui) settings.
11
/****************************************************************************/
12
// SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/
13
// Copyright (C) 2001-2013 DLR (http://www.dlr.de/) and contributors
14
/****************************************************************************/
15
//
16
// This file is part of SUMO.
17
// SUMO is free software: you can redistribute it and/or modify
18
// it under the terms of the GNU General Public License as published by
19
// the Free Software Foundation, either version 3 of the License, or
20
// (at your option) any later version.
21
//
22
/****************************************************************************/
23
24
25
// ===========================================================================
26
// included modules
27
// ===========================================================================
28
#ifdef _MSC_VER
29
#include <
windows_config.h
>
30
#else
31
#include <
config.h
>
32
#endif
33
34
#include <vector>
35
#include <
utils/common/TplConvert.h
>
36
#include <
utils/common/ToString.h
>
37
#include <
utils/common/RGBColor.h
>
38
#include <
utils/common/MsgHandler.h
>
39
#include <
utils/common/FileHelpers.h
>
40
#include <
utils/gui/settings/GUIVisualizationSettings.h
>
41
#include <
utils/gui/settings/GUICompleteSchemeStorage.h
>
42
#include <
utils/foxtools/MFXImageHelper.h
>
43
#include <
utils/xml/SUMOSAXReader.h
>
44
#include <
utils/xml/XMLSubSys.h
>
45
#include "
GUISettingsHandler.h
"
46
47
#ifdef CHECK_MEMORY_LEAKS
48
#include <
foreign/nvwa/debug_new.h
>
49
#endif // CHECK_MEMORY_LEAKS
50
51
52
// ===========================================================================
53
// method definitions
54
// ===========================================================================
55
GUISettingsHandler::GUISettingsHandler
(
const
std::string& content,
bool
isFile)
56
:
SUMOSAXHandler
(content), myDelay(-1), myLookFrom(-1, -1, -1), myLookAt(-1, -1, -1),
57
myCurrentColorer(
SUMO_TAG_NOTHING
), myCurrentScheme(0) {
58
if
(isFile) {
59
XMLSubSys::runParser
(*
this
, content);
60
}
else
{
61
setFileName
(
"registrySettings"
);
62
SUMOSAXReader
* reader =
XMLSubSys::getSAXReader
(*
this
);
63
reader->
parseString
(content);
64
delete
reader;
65
}
66
}
67
68
69
GUISettingsHandler::~GUISettingsHandler
() {
70
}
71
72
73
void
74
GUISettingsHandler::myStartElement
(
int
element,
75
const
SUMOSAXAttributes
& attrs) {
76
bool
ok =
true
;
77
switch
(element) {
78
case
SUMO_TAG_BREAKPOINTS_FILE
: {
79
std::string file = attrs.
get
<std::string>(
SUMO_ATTR_VALUE
, 0, ok);
80
myBreakpoints
=
loadBreakpoints
(file);
81
}
82
break
;
83
case
SUMO_TAG_VIEWSETTINGS
:
84
myViewType
= attrs.
getOpt
<std::string>(
SUMO_ATTR_TYPE
, 0, ok,
"default"
);
85
std::transform(
myViewType
.begin(),
myViewType
.end(),
myViewType
.begin(), tolower);
86
break
;
87
case
SUMO_TAG_DELAY
:
88
myDelay
= attrs.
getOpt
<
SUMOReal
>(
SUMO_ATTR_VALUE
, 0, ok,
myDelay
);
89
break
;
90
case
SUMO_TAG_VIEWPORT
: {
91
const
SUMOReal
x = attrs.
getOpt
<
SUMOReal
>(
SUMO_ATTR_X
, 0, ok,
myLookFrom
.
x
());
92
const
SUMOReal
y = attrs.
getOpt
<
SUMOReal
>(
SUMO_ATTR_Y
, 0, ok,
myLookFrom
.
y
());
93
const
SUMOReal
z = attrs.
getOpt
<
SUMOReal
>(
SUMO_ATTR_ZOOM
, 0, ok,
myLookFrom
.
z
());
94
myLookFrom
.
set
(x, y, z);
95
const
SUMOReal
cx = attrs.
getOpt
<
SUMOReal
>(
SUMO_ATTR_CENTER_X
, 0, ok,
myLookAt
.
x
());
96
const
SUMOReal
cy = attrs.
getOpt
<
SUMOReal
>(
SUMO_ATTR_CENTER_Y
, 0, ok,
myLookAt
.
y
());
97
const
SUMOReal
cz = attrs.
getOpt
<
SUMOReal
>(
SUMO_ATTR_CENTER_Z
, 0, ok,
myLookAt
.
z
());
98
myLookAt
.
set
(cx, cy, cz);
99
break
;
100
}
101
case
SUMO_TAG_SNAPSHOT
: {
102
bool
ok =
true
;
103
std::string file = attrs.
get
<std::string>(
SUMO_ATTR_FILE
, 0, ok);
104
if
(file !=
""
&& !
FileHelpers::isAbsolute
(file)) {
105
file =
FileHelpers::getConfigurationRelative
(
getFileName
(), file);
106
}
107
mySnapshots
[attrs.
getOptSUMOTimeReporting
(
SUMO_ATTR_TIME
, file.c_str(), ok, 0)] = file;
108
}
109
break
;
110
case
SUMO_TAG_VIEWSETTINGS_SCHEME
: {
111
bool
ok =
true
;
112
mySettings
.
name
= attrs.
getOpt
<std::string>(
SUMO_ATTR_NAME
, 0, ok,
mySettings
.
name
);
113
if
(
gSchemeStorage
.
contains
(
mySettings
.
name
)) {
114
mySettings
=
gSchemeStorage
.
get
(
mySettings
.
name
);
115
}
116
}
117
break
;
118
case
SUMO_TAG_VIEWSETTINGS_OPENGL
:
119
mySettings
.
antialiase
=
TplConvert::_2bool
(attrs.
getStringSecure
(
"antialiase"
,
toString
(
mySettings
.
antialiase
)).c_str());
120
mySettings
.
dither
=
TplConvert::_2bool
(attrs.
getStringSecure
(
"dither"
,
toString
(
mySettings
.
dither
)).c_str());
121
break
;
122
case
SUMO_TAG_VIEWSETTINGS_BACKGROUND
: {
123
bool
ok =
true
;
124
mySettings
.
backgroundColor
=
RGBColor::parseColorReporting
(attrs.
getStringSecure
(
"backgroundColor"
,
toString
(
mySettings
.
backgroundColor
)),
"background"
, 0,
true
, ok);
125
mySettings
.
showGrid
=
TplConvert::_2bool
(attrs.
getStringSecure
(
"showGrid"
,
toString
(
mySettings
.
showGrid
)).c_str());
126
mySettings
.
gridXSize
=
TplConvert::_2SUMOReal
(attrs.
getStringSecure
(
"gridXSize"
,
toString
(
mySettings
.
gridXSize
)).c_str());
127
mySettings
.
gridYSize
=
TplConvert::_2SUMOReal
(attrs.
getStringSecure
(
"gridYSize"
,
toString
(
mySettings
.
gridYSize
)).c_str());
128
}
129
break
;
130
case
SUMO_TAG_VIEWSETTINGS_EDGES
: {
131
int
laneEdgeMode =
TplConvert::_2int
(attrs.
getStringSecure
(
"laneEdgeMode"
,
"0"
).c_str());
132
mySettings
.
laneShowBorders
=
TplConvert::_2bool
(attrs.
getStringSecure
(
"laneShowBorders"
,
toString
(
mySettings
.
laneShowBorders
)).c_str());
133
mySettings
.
showLinkDecals
=
TplConvert::_2bool
(attrs.
getStringSecure
(
"showLinkDecals"
,
toString
(
mySettings
.
showLinkDecals
)).c_str());
134
mySettings
.
showRails
=
TplConvert::_2bool
(attrs.
getStringSecure
(
"showRails"
,
toString
(
mySettings
.
showRails
)).c_str());
135
mySettings
.
edgeName
=
parseTextSettings
(
"edgeName"
, attrs,
mySettings
.
edgeName
);
136
mySettings
.
internalEdgeName
=
parseTextSettings
(
"internalEdgeName"
, attrs,
mySettings
.
internalEdgeName
);
137
mySettings
.
streetName
=
parseTextSettings
(
"streetName"
, attrs,
mySettings
.
streetName
);
138
mySettings
.
hideConnectors
=
TplConvert::_2bool
(attrs.
getStringSecure
(
"hideConnectors"
,
toString
(
mySettings
.
hideConnectors
)).c_str());
139
myCurrentColorer
= element;
140
#ifdef HAVE_INTERNAL
141
mySettings
.edgeColorer.setActive(laneEdgeMode);
142
#endif
143
mySettings
.
laneColorer
.
setActive
(laneEdgeMode);
144
}
145
break
;
146
case
SUMO_TAG_COLORSCHEME
:
147
myCurrentScheme
= 0;
148
if
(
myCurrentColorer
==
SUMO_TAG_VIEWSETTINGS_EDGES
) {
149
myCurrentScheme
=
mySettings
.
laneColorer
.
getSchemeByName
(attrs.
getStringSecure
(
SUMO_ATTR_NAME
,
""
));
150
#ifdef HAVE_INTERNAL
151
if
(
myCurrentScheme
== 0) {
152
myCurrentScheme
=
mySettings
.edgeColorer.getSchemeByName(attrs.
getStringSecure
(
SUMO_ATTR_NAME
,
""
));
153
}
154
#endif
155
}
156
if
(
myCurrentColorer
==
SUMO_TAG_VIEWSETTINGS_VEHICLES
) {
157
myCurrentScheme
=
mySettings
.
vehicleColorer
.
getSchemeByName
(attrs.
getStringSecure
(
SUMO_ATTR_NAME
,
""
));
158
}
159
if
(
myCurrentColorer
==
SUMO_TAG_VIEWSETTINGS_JUNCTIONS
) {
160
myCurrentScheme
=
mySettings
.
junctionColorer
.
getSchemeByName
(attrs.
getStringSecure
(
SUMO_ATTR_NAME
,
""
));
161
}
162
if
(
myCurrentScheme
&& !
myCurrentScheme
->
isFixed
()) {
163
bool
ok =
true
;
164
myCurrentScheme
->
setInterpolated
(attrs.
getOpt
<
bool
>(
SUMO_ATTR_INTERPOLATED
, 0, ok,
false
));
165
myCurrentScheme
->
clear
();
166
}
167
break
;
168
case
SUMO_TAG_ENTRY
:
169
if
(
myCurrentScheme
) {
170
bool
ok =
true
;
171
RGBColor
color = attrs.
get
<
RGBColor
>(
SUMO_ATTR_COLOR
, 0, ok);
172
if
(
myCurrentScheme
->
isFixed
()) {
173
myCurrentScheme
->
setColor
(attrs.
getStringSecure
(
SUMO_ATTR_NAME
,
""
), color);
174
}
else
{
175
myCurrentScheme
->
addColor
(color,
176
attrs.
get
<
SUMOReal
>(
SUMO_ATTR_THRESHOLD
, 0, ok));
177
}
178
}
179
break
;
180
case
SUMO_TAG_VIEWSETTINGS_VEHICLES
:
181
mySettings
.
vehicleColorer
.
setActive
(
TplConvert::_2int
(attrs.
getStringSecure
(
"vehicleMode"
,
"0"
).c_str()));
182
mySettings
.
vehicleQuality
=
TplConvert::_2int
(attrs.
getStringSecure
(
"vehicleQuality"
,
toString
(
mySettings
.
vehicleQuality
)).c_str());
183
mySettings
.
minVehicleSize
=
TplConvert::_2SUMOReal
(attrs.
getStringSecure
(
"minVehicleSize"
,
toString
(
mySettings
.
minVehicleSize
)).c_str());
184
mySettings
.
vehicleExaggeration
=
TplConvert::_2SUMOReal
(attrs.
getStringSecure
(
"vehicleExaggeration"
,
toString
(
mySettings
.
vehicleExaggeration
)).c_str());
185
mySettings
.
showBlinker
=
TplConvert::_2bool
(attrs.
getStringSecure
(
"showBlinker"
,
toString
(
mySettings
.
showBlinker
)).c_str());
186
mySettings
.
vehicleName
=
parseTextSettings
(
"vehicleName"
, attrs,
mySettings
.
vehicleName
);
187
myCurrentColorer
= element;
188
break
;
189
case
SUMO_TAG_VIEWSETTINGS_JUNCTIONS
:
190
mySettings
.
junctionColorer
.
setActive
(
TplConvert::_2int
(attrs.
getStringSecure
(
"junctionMode"
,
"0"
).c_str()));
191
mySettings
.
drawLinkTLIndex
=
TplConvert::_2bool
(attrs.
getStringSecure
(
"drawLinkTLIndex"
,
toString
(
mySettings
.
drawLinkTLIndex
)).c_str());
192
mySettings
.
drawLinkJunctionIndex
=
TplConvert::_2bool
(attrs.
getStringSecure
(
"drawLinkJunctionIndex"
,
toString
(
mySettings
.
drawLinkJunctionIndex
)).c_str());
193
mySettings
.
junctionName
=
parseTextSettings
(
"junctionName"
, attrs,
mySettings
.
junctionName
);
194
mySettings
.
internalJunctionName
=
parseTextSettings
(
"internalJunctionName"
, attrs,
mySettings
.
internalJunctionName
);
195
mySettings
.
showLane2Lane
=
TplConvert::_2bool
(attrs.
getStringSecure
(
"showLane2Lane"
,
toString
(
mySettings
.
showLane2Lane
)).c_str());
196
myCurrentColorer
= element;
197
break
;
198
case
SUMO_TAG_VIEWSETTINGS_ADDITIONALS
:
199
mySettings
.
addMode
=
TplConvert::_2int
(attrs.
getStringSecure
(
"addMode"
,
toString
(
mySettings
.
addMode
)).c_str());
200
mySettings
.
minAddSize
=
TplConvert::_2SUMOReal
(attrs.
getStringSecure
(
"minAddSize"
,
toString
(
mySettings
.
minAddSize
)).c_str());
201
mySettings
.
addExaggeration
=
TplConvert::_2SUMOReal
(attrs.
getStringSecure
(
"addExaggeration"
,
toString
(
mySettings
.
addExaggeration
)).c_str());
202
mySettings
.
addName
=
parseTextSettings
(
"addName"
, attrs,
mySettings
.
addName
);
203
break
;
204
case
SUMO_TAG_VIEWSETTINGS_POIS
:
205
mySettings
.
poiExaggeration
=
TplConvert::_2SUMOReal
(attrs.
getStringSecure
(
"poiExaggeration"
,
toString
(
mySettings
.
poiExaggeration
)).c_str());
206
mySettings
.
minPOISize
=
TplConvert::_2SUMOReal
(attrs.
getStringSecure
(
"minPOISize"
,
toString
(
mySettings
.
minPOISize
)).c_str());
207
mySettings
.
poiName
=
parseTextSettings
(
"poiName"
, attrs,
mySettings
.
poiName
);
208
break
;
209
case
SUMO_TAG_VIEWSETTINGS_POLYS
:
210
mySettings
.
polyExaggeration
=
TplConvert::_2SUMOReal
(attrs.
getStringSecure
(
"polyExaggeration"
,
toString
(
mySettings
.
polyExaggeration
)).c_str());
211
mySettings
.
minPolySize
=
TplConvert::_2SUMOReal
(attrs.
getStringSecure
(
"minPolySize"
,
toString
(
mySettings
.
minPolySize
)).c_str());
212
mySettings
.
polyName
=
parseTextSettings
(
"polyName"
, attrs,
mySettings
.
polyName
);
213
break
;
214
case
SUMO_TAG_VIEWSETTINGS_LEGEND
:
215
mySettings
.
showSizeLegend
=
TplConvert::_2bool
(attrs.
getStringSecure
(
"showSizeLegend"
,
toString
(
mySettings
.
showSizeLegend
)).c_str());
216
break
;
217
case
SUMO_TAG_VIEWSETTINGS_DECAL
: {
218
GUISUMOAbstractView::Decal
d;
219
d.
filename
= attrs.
getStringSecure
(
"filename"
, d.
filename
);
220
if
(d.
filename
!=
""
&& !
FileHelpers::isAbsolute
(d.
filename
)) {
221
d.
filename
=
FileHelpers::getConfigurationRelative
(
getFileName
(), d.
filename
);
222
}
223
d.
centerX
= attrs.
getOpt
<
SUMOReal
>(
SUMO_ATTR_CENTER_X
, 0, ok, d.
centerX
);
224
d.
centerY
= attrs.
getOpt
<
SUMOReal
>(
SUMO_ATTR_CENTER_Y
, 0, ok, d.
centerY
);
225
d.
centerZ
= attrs.
getOpt
<
SUMOReal
>(
SUMO_ATTR_CENTER_Z
, 0, ok, d.
centerZ
);
226
d.
width
= attrs.
getOpt
<
SUMOReal
>(
SUMO_ATTR_WIDTH
, 0, ok, d.
width
);
227
d.
height
= attrs.
getOpt
<
SUMOReal
>(
SUMO_ATTR_HEIGHT
, 0, ok, d.
height
);
228
d.
altitude
=
TplConvert::_2SUMOReal
(attrs.
getStringSecure
(
"altitude"
,
toString
(d.
height
)).c_str());
229
d.
rot
=
TplConvert::_2SUMOReal
(attrs.
getStringSecure
(
"rotation"
,
toString
(d.
rot
)).c_str());
230
d.
tilt
=
TplConvert::_2SUMOReal
(attrs.
getStringSecure
(
"tilt"
,
toString
(d.
tilt
)).c_str());
231
d.
roll
=
TplConvert::_2SUMOReal
(attrs.
getStringSecure
(
"roll"
,
toString
(d.
roll
)).c_str());
232
d.
layer
= attrs.
getOpt
<
SUMOReal
>(
SUMO_ATTR_LAYER
, 0, ok, d.
layer
);
233
d.
initialised
=
false
;
234
myDecals
.push_back(d);
235
}
236
break
;
237
default
:
238
break
;
239
}
240
}
241
242
243
GUIVisualizationTextSettings
244
GUISettingsHandler::parseTextSettings
(
245
const
std::string& prefix,
const
SUMOSAXAttributes
& attrs,
246
GUIVisualizationTextSettings
defaults) {
247
bool
ok =
true
;
248
return
GUIVisualizationTextSettings
(
249
TplConvert::_2bool
(attrs.
getStringSecure
(prefix +
"_show"
,
toString
(defaults.
show
)).c_str()),
250
TplConvert::_2SUMOReal
(attrs.
getStringSecure
(prefix +
"_size"
,
toString
(defaults.
size
)).c_str()),
251
RGBColor::parseColorReporting
(attrs.
getStringSecure
(prefix +
"_color"
,
toString
(defaults.
color
)),
"edges"
, 0,
true
, ok));
252
}
253
254
255
std::string
256
GUISettingsHandler::addSettings
(
GUISUMOAbstractView
* view)
const
{
257
if
(
mySettings
.
name
!=
""
) {
258
gSchemeStorage
.
add
(
mySettings
);
259
if
(view) {
260
FXint index = view->
getColoringSchemesCombo
().appendItem(
mySettings
.
name
.c_str());
261
view->
getColoringSchemesCombo
().setCurrentItem(index);
262
view->
setColorScheme
(
mySettings
.
name
);
263
}
264
}
265
return
mySettings
.
name
;
266
}
267
268
269
void
270
GUISettingsHandler::setViewport
(
GUISUMOAbstractView
* view)
const
{
271
if
(
myLookFrom
.
z
() > 0) {
272
view->
setViewport
(
myLookFrom
,
myLookAt
);
273
}
274
}
275
276
277
void
278
GUISettingsHandler::setViewport
(
Position
& lookFrom,
Position
& lookAt)
const
{
279
lookFrom =
myLookFrom
;
280
lookAt =
myLookAt
;
281
}
282
283
284
void
285
GUISettingsHandler::setSnapshots
(
GUISUMOAbstractView
* view)
const
{
286
if
(!
mySnapshots
.empty()) {
287
view->
setSnapshots
(
mySnapshots
);
288
}
289
}
290
291
292
bool
293
GUISettingsHandler::hasDecals
()
const
{
294
return
!
myDecals
.empty();
295
}
296
297
298
const
std::vector<GUISUMOAbstractView::Decal>&
299
GUISettingsHandler::getDecals
()
const
{
300
return
myDecals
;
301
}
302
303
304
SUMOReal
305
GUISettingsHandler::getDelay
()
const
{
306
return
myDelay
;
307
}
308
309
310
std::vector<SUMOTime>
311
GUISettingsHandler::loadBreakpoints
(
const
std::string& file) {
312
std::vector<SUMOTime> result;
313
std::ifstream strm(file.c_str());
314
while
(strm.good()) {
315
std::string val;
316
strm >> val;
317
if
(val.length() == 0) {
318
continue
;
319
}
320
try
{
321
SUMOTime
value =
string2time
(val);
322
result.push_back(value);
323
}
catch
(
NumberFormatException
&) {
324
WRITE_ERROR
(
" A breakpoint-value must be an int, is:"
+ val);
325
}
catch
(
ProcessError
&) {
326
WRITE_ERROR
(
" Could not decode breakpoint '"
+ val +
"'"
);
327
}
catch
(
EmptyData
&) {}
328
}
329
return
result;
330
}
331
332
/****************************************************************************/
333
build
buildd
sumo-0.17.1~dfsg
src
utils
gui
settings
GUISettingsHandler.cpp
Generated on Sun Jun 16 2013 17:30:15 for SUMO - Simulation of Urban MObility by
1.8.3.1