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