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
NGFrame.cpp
Go to the documentation of this file.
1
/****************************************************************************/
9
// Sets and checks options for netgen
10
/****************************************************************************/
11
// SUMO, Simulation of Urban MObility; see http://sumo-sim.org/
12
// Copyright (C) 2011-2014 DLR (http://www.dlr.de/) and contributors
13
/****************************************************************************/
14
//
15
// This file is part of SUMO.
16
// SUMO is free software: you can redistribute it and/or modify
17
// it under the terms of the GNU General Public License as published by
18
// the Free Software Foundation, either version 3 of the License, or
19
// (at your option) any later version.
20
//
21
/****************************************************************************/
22
23
24
// ===========================================================================
25
// included modules
26
// ===========================================================================
27
#ifdef _MSC_VER
28
#include <
windows_config.h
>
29
#else
30
#include <
config.h
>
31
#endif
32
33
#include <string>
34
#include "
NGFrame.h
"
35
#include <
netbuild/NBNetBuilder.h
>
36
#include <
utils/options/Option.h
>
37
#include <
utils/options/OptionsCont.h
>
38
#include <
utils/common/MsgHandler.h
>
39
#include <
utils/common/SystemFrame.h
>
40
#include <
utils/common/ToString.h
>
41
42
#ifdef CHECK_MEMORY_LEAKS
43
#include <
foreign/nvwa/debug_new.h
>
44
#endif // CHECK_MEMORY_LEAKS
45
46
47
// ===========================================================================
48
// method definitions
49
// ===========================================================================
50
void
51
NGFrame::fillOptions
() {
52
OptionsCont
& oc =
OptionsCont::getOptions
();
53
// register grid-net options
54
oc.
doRegister
(
"grid"
,
'g'
,
new
Option_Bool
(
false
));
55
oc.
addSynonyme
(
"grid"
,
"grid-net"
,
true
);
56
oc.
addDescription
(
"grid"
,
"Grid Network"
,
"Forces NETGEN to build a grid-like network"
);
57
58
oc.
doRegister
(
"grid.number"
,
new
Option_Integer
(5));
59
oc.
addSynonyme
(
"grid.number"
,
"grid-number"
,
true
);
60
oc.
addSynonyme
(
"grid.number"
,
"number"
);
61
oc.
addDescription
(
"grid.number"
,
"Grid Network"
,
"The number of junctions in both dirs"
);
62
63
oc.
doRegister
(
"grid.length"
,
new
Option_Float
(100));
64
oc.
addSynonyme
(
"grid.length"
,
"grid-length"
,
true
);
65
oc.
addSynonyme
(
"grid.length"
,
"length"
);
66
oc.
addDescription
(
"grid.length"
,
"Grid Network"
,
"The length of streets in both dirs"
);
67
68
oc.
doRegister
(
"grid.x-number"
,
new
Option_Integer
(5));
69
oc.
addSynonyme
(
"grid.x-number"
,
"grid-x-number"
,
true
);
70
oc.
addSynonyme
(
"grid.x-number"
,
"x-no"
);
71
oc.
addDescription
(
"grid.x-number"
,
"Grid Network"
,
"The number of junctions in x-dir; Overrides --grid-number"
);
72
73
oc.
doRegister
(
"grid.y-number"
,
new
Option_Integer
(5));
74
oc.
addSynonyme
(
"grid.y-number"
,
"grid-y-number"
,
true
);
75
oc.
addSynonyme
(
"grid.y-number"
,
"y-no"
);
76
oc.
addDescription
(
"grid.y-number"
,
"Grid Network"
,
"The number of junctions in y-dir; Overrides --grid-number"
);
77
78
oc.
doRegister
(
"grid.x-length"
,
new
Option_Float
(100));
79
oc.
addSynonyme
(
"grid.x-length"
,
"grid-x-length"
,
true
);
80
oc.
addSynonyme
(
"grid.x-length"
,
"x-length"
);
81
oc.
addDescription
(
"grid.x-length"
,
"Grid Network"
,
"The length of horizontal streets; Overrides --grid-length"
);
82
83
oc.
doRegister
(
"grid.y-length"
,
new
Option_Float
(100));
84
oc.
addSynonyme
(
"grid.y-length"
,
"grid-y-length"
,
true
);
85
oc.
addSynonyme
(
"grid.y-length"
,
"y-length"
);
86
oc.
addDescription
(
"grid.y-length"
,
"Grid Network"
,
"The length of vertical streets; Overrides --grid-length"
);
87
88
oc.
doRegister
(
"grid.attach-length"
,
new
Option_Float
(0));
89
oc.
addSynonyme
(
"grid.attach-length"
,
"attach-length"
,
true
);
90
oc.
addDescription
(
"grid.attach-length"
,
"Grid Network"
,
"The length of streets attached at the boundary; 0 means no streets are attached"
);
91
92
93
// register spider-net options
94
oc.
doRegister
(
"spider"
,
's'
,
new
Option_Bool
(
false
));
95
oc.
addSynonyme
(
"spider"
,
"spider-net"
,
true
);
96
oc.
addDescription
(
"spider"
,
"Spider Network"
,
"Forces NETGEN to build a spider-net-like network"
);
97
98
oc.
doRegister
(
"spider.arm-number"
,
new
Option_Integer
(13));
99
oc.
addSynonyme
(
"spider.arm-number"
,
"spider-arm-number"
,
true
);
100
oc.
addSynonyme
(
"spider.arm-number"
,
"arms"
);
101
oc.
addDescription
(
"spider.arm-number"
,
"Spider Network"
,
"The number of axes within the net"
);
102
103
oc.
doRegister
(
"spider.circle-number"
,
new
Option_Integer
(20));
104
oc.
addSynonyme
(
"spider.circle-number"
,
"spider-circle-number"
,
true
);
105
oc.
addSynonyme
(
"spider.circle-number"
,
"circles"
);
106
oc.
addDescription
(
"spider.circle-number"
,
"Spider Network"
,
"The number of circles of the net"
);
107
108
oc.
doRegister
(
"spider.space-radius"
,
new
Option_Float
(100));
109
oc.
addSynonyme
(
"spider.space-radius"
,
"spider-space-rad"
,
true
);
110
oc.
addSynonyme
(
"spider.space-radius"
,
"radius"
);
111
oc.
addDescription
(
"spider.space-radius"
,
"Spider Network"
,
"The distances between the circles"
);
112
113
oc.
doRegister
(
"spider.omit-center"
,
new
Option_Bool
(
false
));
114
oc.
addSynonyme
(
"spider.omit-center"
,
"spider-omit-center"
,
true
);
115
oc.
addSynonyme
(
"spider.omit-center"
,
"nocenter"
);
116
oc.
addDescription
(
"spider.omit-center"
,
"Spider Network"
,
"Omit the central node of the network"
);
117
118
119
// register random-net options
120
oc.
doRegister
(
"rand"
,
'r'
,
new
Option_Bool
(
false
));
121
oc.
addSynonyme
(
"rand"
,
"random-net"
,
true
);
122
oc.
addDescription
(
"rand"
,
"Random Network"
,
"Forces NETGEN to build a random network"
);
123
124
oc.
doRegister
(
"rand.iterations"
,
new
Option_Integer
(2000));
125
oc.
addSynonyme
(
"rand.iterations"
,
"rand-iterations"
,
true
);
126
oc.
addSynonyme
(
"rand.iterations"
,
"iterations"
);
127
oc.
addDescription
(
"rand.iterations"
,
"Random Network"
,
"Describes how many times an edge shall be added to the net"
);
128
129
oc.
doRegister
(
"rand.bidi-probability"
,
new
Option_Float
(1));
130
oc.
addSynonyme
(
"rand.bidi-probability"
,
"rand-bidi-probability"
,
true
);
131
oc.
addSynonyme
(
"rand.bidi-probability"
,
"bidi"
);
132
oc.
addDescription
(
"rand.bidi-probability"
,
"Random Network"
,
"Defines the probability to build a reverse edge"
);
133
134
oc.
doRegister
(
"rand.max-distance"
,
new
Option_Float
(250));
135
oc.
addSynonyme
(
"rand.max-distance"
,
"rand-max-distance"
,
true
);
136
oc.
addSynonyme
(
"rand.max-distance"
,
"max-dist"
);
137
oc.
addDescription
(
"rand.max-distance"
,
"Random Network"
,
""
);
138
139
oc.
doRegister
(
"rand.min-distance"
,
new
Option_Float
(100));
140
oc.
addSynonyme
(
"rand.min-distance"
,
"rand-min-distance"
,
true
);
141
oc.
addSynonyme
(
"rand.min-distance"
,
"min-dist"
);
142
oc.
addDescription
(
"rand.min-distance"
,
"Random Network"
,
""
);
143
144
oc.
doRegister
(
"rand.min-angle"
,
new
Option_Float
(
DEG2RAD
(45.0)));
145
oc.
addSynonyme
(
"rand.min-angle"
,
"rand-min-anglee"
,
true
);
146
oc.
addSynonyme
(
"rand.min-angle"
,
"min-angle"
);
147
oc.
addDescription
(
"rand.min-angle"
,
"Random Network"
,
""
);
148
149
oc.
doRegister
(
"rand.num-tries"
,
new
Option_Integer
(50));
150
oc.
addSynonyme
(
"rand.num-tries"
,
"rand-num-tries"
,
true
);
151
oc.
addSynonyme
(
"rand.num-tries"
,
"num-tries"
);
152
oc.
addDescription
(
"rand.num-tries"
,
"Random Network"
,
""
);
153
154
oc.
doRegister
(
"rand.connectivity"
,
new
Option_Float
((
SUMOReal
) 0.95));
155
oc.
addSynonyme
(
"rand.connectivity"
,
"rand-connectivity"
,
true
);
156
oc.
addSynonyme
(
"rand.connectivity"
,
"connectivity"
);
157
oc.
addDescription
(
"rand.connectivity"
,
"Random Network"
,
""
);
158
159
oc.
doRegister
(
"rand.neighbor-dist1"
,
new
Option_Float
(0));
160
oc.
addSynonyme
(
"rand.neighbor-dist1"
,
"rand-neighbor-dist1"
,
true
);
161
oc.
addSynonyme
(
"rand.neighbor-dist1"
,
"dist1"
);
162
oc.
addDescription
(
"rand.neighbor-dist1"
,
"Random Network"
,
""
);
163
164
oc.
doRegister
(
"rand.neighbor-dist2"
,
new
Option_Float
(0));
165
oc.
addSynonyme
(
"rand.neighbor-dist2"
,
"rand-neighbor-dist2"
,
true
);
166
oc.
addSynonyme
(
"rand.neighbor-dist2"
,
"dist2"
);
167
oc.
addDescription
(
"rand.neighbor-dist2"
,
"Random Network"
,
""
);
168
169
oc.
doRegister
(
"rand.neighbor-dist3"
,
new
Option_Float
(10));
170
oc.
addSynonyme
(
"rand.neighbor-dist3"
,
"rand-neighbor-dist3"
,
true
);
171
oc.
addSynonyme
(
"rand.neighbor-dist3"
,
"dist3"
);
172
oc.
addDescription
(
"rand.neighbor-dist3"
,
"Random Network"
,
""
);
173
174
oc.
doRegister
(
"rand.neighbor-dist4"
,
new
Option_Float
(10));
175
oc.
addSynonyme
(
"rand.neighbor-dist4"
,
"rand-neighbor-dist4"
,
true
);
176
oc.
addSynonyme
(
"rand.neighbor-dist4"
,
"dist4"
);
177
oc.
addDescription
(
"rand.neighbor-dist4"
,
"Random Network"
,
""
);
178
179
oc.
doRegister
(
"rand.neighbor-dist5"
,
new
Option_Float
(2));
180
oc.
addSynonyme
(
"rand.neighbor-dist5"
,
"rand-neighbor-dist5"
,
true
);
181
oc.
addSynonyme
(
"rand.neighbor-dist5"
,
"dist5"
);
182
oc.
addDescription
(
"rand.neighbor-dist5"
,
"Random Network"
,
""
);
183
184
oc.
doRegister
(
"rand.neighbor-dist6"
,
new
Option_Float
(1));
185
oc.
addSynonyme
(
"rand.neighbor-dist6"
,
"rand-neighbor-dist6"
,
true
);
186
oc.
addSynonyme
(
"rand.neighbor-dist6"
,
"dist6"
);
187
oc.
addDescription
(
"rand.neighbor-dist6"
,
"Random Network"
,
""
);
188
}
189
190
191
bool
192
NGFrame::checkOptions
() {
193
OptionsCont
& oc =
OptionsCont::getOptions
();
194
bool
ok =
true
;
195
// check whether exactly one type of a network to build was wished
196
int
no = 0;
197
if
(oc.
getBool
(
"spider"
)) {
198
no++;
199
}
200
if
(oc.
getBool
(
"grid"
)) {
201
no++;
202
}
203
if
(oc.
getBool
(
"rand"
)) {
204
no++;
205
}
206
if
(no == 0) {
207
WRITE_ERROR
(
"You have to specify the type of network to generate."
);
208
ok =
false
;
209
}
210
if
(no > 1) {
211
WRITE_ERROR
(
"You may specify only one type of network to generate at once."
);
212
ok =
false
;
213
}
214
// check whether the junction type to use is properly set
215
if
(oc.
isSet
(
"default-junction-type"
)) {
216
std::string type = oc.
getString
(
"default-junction-type"
);
217
if
(type !=
toString
(
NODETYPE_TRAFFIC_LIGHT
) &&
218
type !=
toString
(
NODETYPE_TRAFFIC_LIGHT_NOJUNCTION
) &&
219
type !=
toString
(
NODETYPE_PRIORITY
) &&
220
type !=
toString
(
NODETYPE_PRIORITY_STOP
) &&
221
type !=
toString
(
NODETYPE_ALLWAY_STOP
) &&
222
type !=
toString
(
NODETYPE_RIGHT_BEFORE_LEFT
)) {
223
WRITE_ERROR
(
"Only the following junction types are known: "
+
224
toString
(
NODETYPE_TRAFFIC_LIGHT
) +
", "
+
225
toString
(
NODETYPE_TRAFFIC_LIGHT_NOJUNCTION
) +
", "
+
226
toString
(
NODETYPE_PRIORITY
) +
", "
+
227
toString
(
NODETYPE_PRIORITY_STOP
) +
", "
+
228
toString
(
NODETYPE_ALLWAY_STOP
) +
", "
+
229
toString
(
NODETYPE_RIGHT_BEFORE_LEFT
));
230
ok =
false
;
231
}
232
}
233
return
ok;
234
}
235
236
237
/****************************************************************************/
238
tmp
buildd
sumo-0.21.0+dfsg
src
netgen
NGFrame.cpp
Generated on Thu Nov 20 2014 19:49:56 for SUMO - Simulation of Urban MObility by
1.8.1.2