Eclipse SUMO - Simulation of Urban MObility
NGFrame.cpp
Go to the documentation of this file.
1 /****************************************************************************/
2 // Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3 // Copyright (C) 2011-2019 German Aerospace Center (DLR) and others.
4 // This program and the accompanying materials
5 // are made available under the terms of the Eclipse Public License v2.0
6 // which accompanies this distribution, and is available at
7 // http://www.eclipse.org/legal/epl-v20.html
8 // SPDX-License-Identifier: EPL-2.0
9 /****************************************************************************/
17 // Sets and checks options for netgen
18 /****************************************************************************/
19 
20 
21 // ===========================================================================
22 // included modules
23 // ===========================================================================
24 #include <config.h>
25 
26 #include <string>
27 #include "NGFrame.h"
28 #include <netbuild/NBNetBuilder.h>
29 #include <utils/options/Option.h>
33 #include <utils/common/ToString.h>
34 
35 
36 // ===========================================================================
37 // method definitions
38 // ===========================================================================
39 void
42  oc.doRegister("alphanumerical-ids", new Option_Bool(true));
43  oc.addDescription("alphanumerical-ids", "Output", "The Ids of generated nodes use an alphanumerical code for easier readability when possible");
44 
45  // register processing options
46  oc.doRegister("turn-lanes", new Option_Integer(0));
47  oc.addDescription("turn-lanes", "Processing", "Generate INT left-turn lanes");
48  oc.doRegister("turn-lanes.length", new Option_Float(20));
49  oc.addDescription("turn-lanes.length", "Processing", "Set the length of generated turning lanes to FLOAT");
50 
51  oc.doRegister("perturb-x", new Option_String("0"));
52  oc.addDescription("perturb-x", "Processing", "Apply random spatial pertubation in x direction according the the given distribution");
53  oc.doRegister("perturb-y", new Option_String("0"));
54  oc.addDescription("perturb-y", "Processing", "Apply random spatial pertubation in y direction according the the given distribution");
55  oc.doRegister("perturb-z", new Option_String("0"));
56  oc.addDescription("perturb-z", "Processing", "Apply random spatial pertubation in z direction according the the given distribution");
57 
58 
59  // register grid-net options
60  oc.doRegister("grid", 'g', new Option_Bool(false));
61  oc.addSynonyme("grid", "grid-net", true);
62  oc.addDescription("grid", "Grid Network", "Forces NETGEN to build a grid-like network");
63 
64  oc.doRegister("grid.number", new Option_Integer(5));
65  oc.addSynonyme("grid.number", "grid-number", true);
66  oc.addSynonyme("grid.number", "number");
67  oc.addDescription("grid.number", "Grid Network", "The number of junctions in both dirs");
68 
69  oc.doRegister("grid.length", new Option_Float(100));
70  oc.addSynonyme("grid.length", "grid-length", true);
71  oc.addSynonyme("grid.length", "length");
72  oc.addDescription("grid.length", "Grid Network", "The length of streets in both dirs");
73 
74  oc.doRegister("grid.x-number", new Option_Integer(5));
75  oc.addSynonyme("grid.x-number", "grid-x-number", true);
76  oc.addSynonyme("grid.x-number", "x-no");
77  oc.addDescription("grid.x-number", "Grid Network", "The number of junctions in x-dir; Overrides --grid-number");
78 
79  oc.doRegister("grid.y-number", new Option_Integer(5));
80  oc.addSynonyme("grid.y-number", "grid-y-number", true);
81  oc.addSynonyme("grid.y-number", "y-no");
82  oc.addDescription("grid.y-number", "Grid Network", "The number of junctions in y-dir; Overrides --grid-number");
83 
84  oc.doRegister("grid.x-length", new Option_Float(100));
85  oc.addSynonyme("grid.x-length", "grid-x-length", true);
86  oc.addSynonyme("grid.x-length", "x-length");
87  oc.addDescription("grid.x-length", "Grid Network", "The length of horizontal streets; Overrides --grid-length");
88 
89  oc.doRegister("grid.y-length", new Option_Float(100));
90  oc.addSynonyme("grid.y-length", "grid-y-length", true);
91  oc.addSynonyme("grid.y-length", "y-length");
92  oc.addDescription("grid.y-length", "Grid Network", "The length of vertical streets; Overrides --grid-length");
93 
94  oc.doRegister("grid.attach-length", new Option_Float(0));
95  oc.addSynonyme("grid.attach-length", "attach-length", true);
96  oc.addDescription("grid.attach-length", "Grid Network", "The length of streets attached at the boundary; 0 means no streets are attached");
97 
98  // register spider-net options
99  oc.doRegister("spider", 's', new Option_Bool(false));
100  oc.addSynonyme("spider", "spider-net", true);
101  oc.addDescription("spider", "Spider Network", "Forces NETGEN to build a spider-net-like network");
102 
103  oc.doRegister("spider.arm-number", new Option_Integer(13));
104  oc.addSynonyme("spider.arm-number", "spider-arm-number", true);
105  oc.addSynonyme("spider.arm-number", "arms");
106  oc.addDescription("spider.arm-number", "Spider Network", "The number of axes within the net");
107 
108  oc.doRegister("spider.circle-number", new Option_Integer(20));
109  oc.addSynonyme("spider.circle-number", "spider-circle-number", true);
110  oc.addSynonyme("spider.circle-number", "circles");
111  oc.addDescription("spider.circle-number", "Spider Network", "The number of circles of the net");
112 
113  oc.doRegister("spider.space-radius", new Option_Float(100));
114  oc.addSynonyme("spider.space-radius", "spider-space-rad", true);
115  oc.addSynonyme("spider.space-radius", "radius");
116  oc.addDescription("spider.space-radius", "Spider Network", "The distances between the circles");
117 
118  oc.doRegister("spider.omit-center", new Option_Bool(false));
119  oc.addSynonyme("spider.omit-center", "spider-omit-center", true);
120  oc.addSynonyme("spider.omit-center", "nocenter");
121  oc.addDescription("spider.omit-center", "Spider Network", "Omit the central node of the network");
122 
123 
124  // register random-net options
125  oc.doRegister("rand", 'r', new Option_Bool(false));
126  oc.addSynonyme("rand", "random-net", true);
127  oc.addDescription("rand", "Random Network", "Forces NETGEN to build a random network");
128 
129  oc.doRegister("rand.iterations", new Option_Integer(2000));
130  oc.addSynonyme("rand.iterations", "rand-iterations", true);
131  oc.addSynonyme("rand.iterations", "iterations");
132  oc.addDescription("rand.iterations", "Random Network", "Describes how many times an edge shall be added to the net");
133 
134  oc.doRegister("rand.bidi-probability", new Option_Float(1));
135  oc.addSynonyme("rand.bidi-probability", "rand-bidi-probability", true);
136  oc.addSynonyme("rand.bidi-probability", "bidi");
137  oc.addDescription("rand.bidi-probability", "Random Network", "Defines the probability to build a reverse edge");
138 
139  oc.doRegister("rand.max-distance", new Option_Float(250));
140  oc.addSynonyme("rand.max-distance", "rand-max-distance", true);
141  oc.addSynonyme("rand.max-distance", "max-dist");
142  oc.addDescription("rand.max-distance", "Random Network", "The maximum distance for each edge");
143 
144  oc.doRegister("rand.min-distance", new Option_Float(100));
145  oc.addSynonyme("rand.min-distance", "rand-min-distance", true);
146  oc.addSynonyme("rand.min-distance", "min-dist");
147  oc.addDescription("rand.min-distance", "Random Network", "The minimum distance for each edge");
148 
149  oc.doRegister("rand.min-angle", new Option_Float(45.0));
150  oc.addSynonyme("rand.min-angle", "rand-min-anglee", true);
151  oc.addSynonyme("rand.min-angle", "min-angle");
152  oc.addDescription("rand.min-angle", "Random Network", "The minimum angle for each pair of (bidirectional) roads in DEGREES");
153 
154  oc.doRegister("rand.num-tries", new Option_Integer(50));
155  oc.addSynonyme("rand.num-tries", "rand-num-tries", true);
156  oc.addSynonyme("rand.num-tries", "num-tries");
157  oc.addDescription("rand.num-tries", "Random Network", "The number of tries for creating each node");
158 
159  oc.doRegister("rand.connectivity", new Option_Float((double) 0.95));
160  oc.addSynonyme("rand.connectivity", "rand-connectivity", true);
161  oc.addSynonyme("rand.connectivity", "connectivity");
162  oc.addDescription("rand.connectivity", "Random Network", "Probability for roads to continue at each node");
163 
164  oc.doRegister("rand.neighbor-dist1", new Option_Float(0));
165  oc.addSynonyme("rand.neighbor-dist1", "rand-neighbor-dist1", true);
166  oc.addSynonyme("rand.neighbor-dist1", "dist1");
167  oc.addDescription("rand.neighbor-dist1", "Random Network", "Probability for a node having exactly 1 neighbor");
168 
169  oc.doRegister("rand.neighbor-dist2", new Option_Float(0));
170  oc.addSynonyme("rand.neighbor-dist2", "rand-neighbor-dist2", true);
171  oc.addSynonyme("rand.neighbor-dist2", "dist2");
172  oc.addDescription("rand.neighbor-dist2", "Random Network", "Probability for a node having exactly 2 neighbors");
173 
174  oc.doRegister("rand.neighbor-dist3", new Option_Float(10));
175  oc.addSynonyme("rand.neighbor-dist3", "rand-neighbor-dist3", true);
176  oc.addSynonyme("rand.neighbor-dist3", "dist3");
177  oc.addDescription("rand.neighbor-dist3", "Random Network", "Probability for a node having exactly 3 neighbors");
178 
179  oc.doRegister("rand.neighbor-dist4", new Option_Float(10));
180  oc.addSynonyme("rand.neighbor-dist4", "rand-neighbor-dist4", true);
181  oc.addSynonyme("rand.neighbor-dist4", "dist4");
182  oc.addDescription("rand.neighbor-dist4", "Random Network", "Probability for a node having exactly 4 neighbors");
183 
184  oc.doRegister("rand.neighbor-dist5", new Option_Float(2));
185  oc.addSynonyme("rand.neighbor-dist5", "rand-neighbor-dist5", true);
186  oc.addSynonyme("rand.neighbor-dist5", "dist5");
187  oc.addDescription("rand.neighbor-dist5", "Random Network", "Probability for a node having exactly 5 neighbors");
188 
189  oc.doRegister("rand.neighbor-dist6", new Option_Float(1));
190  oc.addSynonyme("rand.neighbor-dist6", "rand-neighbor-dist6", true);
191  oc.addSynonyme("rand.neighbor-dist6", "dist6");
192  oc.addDescription("rand.neighbor-dist6", "Random Network", "Probability for a node having exactly 6 neighbors");
193 
194  oc.doRegister("rand.random-lanenumber", new Option_Bool(false));
195  oc.addDescription("rand.random-lanenumber", "Random Network", "Draw lane numbers randomly from [1,default.lanenumber]");
196 
197  oc.doRegister("rand.random-priority", new Option_Bool(false));
198  oc.addDescription("rand.random-priority", "Random Network", "Draw edge priority randomly from [1,default.priority]");
199 
200  oc.doRegister("rand.grid", new Option_Bool(false));
201  oc.addDescription("rand.grid", "Random Network", "Place nodes on a regular grid with spacing rand.min-distance");
202 }
203 
204 
205 bool
208  bool ok = true;
209  // check whether exactly one type of a network to build was wished
210  int no = 0;
211  if (oc.getBool("spider")) {
212  no++;
213  }
214  if (oc.getBool("grid")) {
215  no++;
216  }
217  if (oc.getBool("rand")) {
218  no++;
219  }
220  if (no == 0) {
221  WRITE_ERROR("You have to specify the type of network to generate.");
222  ok = false;
223  }
224  if (no > 1) {
225  WRITE_ERROR("You may specify only one type of network to generate at once.");
226  ok = false;
227  }
228  // check whether the junction type to use is properly set
229  if (oc.isSet("default-junction-type")) {
230  std::string type = oc.getString("default-junction-type");
231  if (type != toString(NODETYPE_TRAFFIC_LIGHT) &&
234  type != toString(NODETYPE_PRIORITY) &&
235  type != toString(NODETYPE_PRIORITY_STOP) &&
236  type != toString(NODETYPE_ALLWAY_STOP) &&
237  type != toString(NODETYPE_ZIPPER) &&
238  type != toString(NODETYPE_NOJUNCTION) &&
239  type != toString(NODETYPE_RAIL_SIGNAL) &&
240  type != toString(NODETYPE_RAIL_CROSSING) &&
242  WRITE_ERROR("Only the following junction types are known: " +
246  toString(NODETYPE_PRIORITY) + ", " +
249  toString(NODETYPE_ZIPPER) + ", " +
250  toString(NODETYPE_NOJUNCTION) + ", " +
254  ok = false;
255  }
256  }
257  return ok;
258 }
259 
260 
261 /****************************************************************************/
262 
OptionsCont::isSet
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
Definition: OptionsCont.cpp:136
NODETYPE_PRIORITY
Definition: SUMOXMLDefinitions.h:1056
NODETYPE_TRAFFIC_LIGHT_RIGHT_ON_RED
Definition: SUMOXMLDefinitions.h:1053
ToString.h
NODETYPE_ZIPPER
Definition: SUMOXMLDefinitions.h:1060
Option_Bool
Definition: Option.h:540
OptionsCont.h
MsgHandler.h
NGFrame::fillOptions
static void fillOptions()
Inserts options used by the network generator.
Definition: NGFrame.cpp:40
OptionsCont::getString
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
Definition: OptionsCont.cpp:202
OptionsCont::getBool
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
Definition: OptionsCont.cpp:223
OptionsCont::getOptions
static OptionsCont & getOptions()
Retrieves the options.
Definition: OptionsCont.cpp:58
NODETYPE_ALLWAY_STOP
Definition: SUMOXMLDefinitions.h:1059
NODETYPE_RAIL_SIGNAL
Definition: SUMOXMLDefinitions.h:1054
OptionsCont::addDescription
void addDescription(const std::string &name, const std::string &subtopic, const std::string &description)
Adds a description for an option.
Definition: OptionsCont.cpp:473
NODETYPE_PRIORITY_STOP
Definition: SUMOXMLDefinitions.h:1057
SystemFrame.h
NODETYPE_TRAFFIC_LIGHT_NOJUNCTION
Definition: SUMOXMLDefinitions.h:1052
OptionsCont::addSynonyme
void addSynonyme(const std::string &name1, const std::string &name2, bool isDeprecated=false)
Adds a synonyme for an options name (any order)
Definition: OptionsCont.cpp:96
NBNetBuilder.h
OptionsCont::doRegister
void doRegister(const std::string &name, Option *v)
Adds an option under the given name.
Definition: OptionsCont.cpp:75
Option_String
Definition: Option.h:401
OptionsCont
A storage for options typed value containers)
Definition: OptionsCont.h:90
NODETYPE_RAIL_CROSSING
Definition: SUMOXMLDefinitions.h:1055
NODETYPE_RIGHT_BEFORE_LEFT
Definition: SUMOXMLDefinitions.h:1058
NGFrame.h
toString
std::string toString(const T &t, std::streamsize accuracy=gPrecision)
Definition: ToString.h:48
Option.h
Option_Float
Definition: Option.h:472
config.h
NGFrame::checkOptions
static bool checkOptions()
Checks set options from the OptionsCont-singleton for being valid.
Definition: NGFrame.cpp:206
Option_Integer
An integer-option.
Definition: Option.h:333
WRITE_ERROR
#define WRITE_ERROR(msg)
Definition: MsgHandler.h:245
NODETYPE_NOJUNCTION
Definition: SUMOXMLDefinitions.h:1062
NODETYPE_TRAFFIC_LIGHT
Definition: SUMOXMLDefinitions.h:1051