SUMO - Simulation of Urban MObility
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules 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.dlr.de/
12 // Copyright (C) 2011-2016 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>
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
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  oc.doRegister("grid.alphanumerical-ids", new Option_Bool(false));
93  oc.addDescription("grid.alphanumerical-ids", "Grid Network", "The Ids of generated nodes use letters for the X axis");
94 
95  // register spider-net options
96  oc.doRegister("spider", 's', new Option_Bool(false));
97  oc.addSynonyme("spider", "spider-net", true);
98  oc.addDescription("spider", "Spider Network", "Forces NETGEN to build a spider-net-like network");
99 
100  oc.doRegister("spider.arm-number", new Option_Integer(13));
101  oc.addSynonyme("spider.arm-number", "spider-arm-number", true);
102  oc.addSynonyme("spider.arm-number", "arms");
103  oc.addDescription("spider.arm-number", "Spider Network", "The number of axes within the net");
104 
105  oc.doRegister("spider.circle-number", new Option_Integer(20));
106  oc.addSynonyme("spider.circle-number", "spider-circle-number", true);
107  oc.addSynonyme("spider.circle-number", "circles");
108  oc.addDescription("spider.circle-number", "Spider Network", "The number of circles of the net");
109 
110  oc.doRegister("spider.space-radius", new Option_Float(100));
111  oc.addSynonyme("spider.space-radius", "spider-space-rad", true);
112  oc.addSynonyme("spider.space-radius", "radius");
113  oc.addDescription("spider.space-radius", "Spider Network", "The distances between the circles");
114 
115  oc.doRegister("spider.omit-center", new Option_Bool(false));
116  oc.addSynonyme("spider.omit-center", "spider-omit-center", true);
117  oc.addSynonyme("spider.omit-center", "nocenter");
118  oc.addDescription("spider.omit-center", "Spider Network", "Omit the central node of the network");
119 
120 
121  // register random-net options
122  oc.doRegister("rand", 'r', new Option_Bool(false));
123  oc.addSynonyme("rand", "random-net", true);
124  oc.addDescription("rand", "Random Network", "Forces NETGEN to build a random network");
125 
126  oc.doRegister("rand.iterations", new Option_Integer(2000));
127  oc.addSynonyme("rand.iterations", "rand-iterations", true);
128  oc.addSynonyme("rand.iterations", "iterations");
129  oc.addDescription("rand.iterations", "Random Network", "Describes how many times an edge shall be added to the net");
130 
131  oc.doRegister("rand.bidi-probability", new Option_Float(1));
132  oc.addSynonyme("rand.bidi-probability", "rand-bidi-probability", true);
133  oc.addSynonyme("rand.bidi-probability", "bidi");
134  oc.addDescription("rand.bidi-probability", "Random Network", "Defines the probability to build a reverse edge");
135 
136  oc.doRegister("rand.max-distance", new Option_Float(250));
137  oc.addSynonyme("rand.max-distance", "rand-max-distance", true);
138  oc.addSynonyme("rand.max-distance", "max-dist");
139  oc.addDescription("rand.max-distance", "Random Network", "The maximum distance for each edge");
140 
141  oc.doRegister("rand.min-distance", new Option_Float(100));
142  oc.addSynonyme("rand.min-distance", "rand-min-distance", true);
143  oc.addSynonyme("rand.min-distance", "min-dist");
144  oc.addDescription("rand.min-distance", "Random Network", "The minimum distance for each edge");
145 
146  oc.doRegister("rand.min-angle", new Option_Float(DEG2RAD(45.0)));
147  oc.addSynonyme("rand.min-angle", "rand-min-anglee", true);
148  oc.addSynonyme("rand.min-angle", "min-angle");
149  oc.addDescription("rand.min-angle", "Random Network", "The minimum angle for each pair of (bidirectional) roads");
150 
151  oc.doRegister("rand.num-tries", new Option_Integer(50));
152  oc.addSynonyme("rand.num-tries", "rand-num-tries", true);
153  oc.addSynonyme("rand.num-tries", "num-tries");
154  oc.addDescription("rand.num-tries", "Random Network", "The number of tries for creating each node");
155 
156  oc.doRegister("rand.connectivity", new Option_Float((SUMOReal) 0.95));
157  oc.addSynonyme("rand.connectivity", "rand-connectivity", true);
158  oc.addSynonyme("rand.connectivity", "connectivity");
159  oc.addDescription("rand.connectivity", "Random Network", "Probability for roads to continue at each node");
160 
161  oc.doRegister("rand.neighbor-dist1", new Option_Float(0));
162  oc.addSynonyme("rand.neighbor-dist1", "rand-neighbor-dist1", true);
163  oc.addSynonyme("rand.neighbor-dist1", "dist1");
164  oc.addDescription("rand.neighbor-dist1", "Random Network", "Probability for a node having exactly 1 neighbor");
165 
166  oc.doRegister("rand.neighbor-dist2", new Option_Float(0));
167  oc.addSynonyme("rand.neighbor-dist2", "rand-neighbor-dist2", true);
168  oc.addSynonyme("rand.neighbor-dist2", "dist2");
169  oc.addDescription("rand.neighbor-dist2", "Random Network", "Probability for a node having exactly 2 neighbors");
170 
171  oc.doRegister("rand.neighbor-dist3", new Option_Float(10));
172  oc.addSynonyme("rand.neighbor-dist3", "rand-neighbor-dist3", true);
173  oc.addSynonyme("rand.neighbor-dist3", "dist3");
174  oc.addDescription("rand.neighbor-dist3", "Random Network", "Probability for a node having exactly 3 neighbors");
175 
176  oc.doRegister("rand.neighbor-dist4", new Option_Float(10));
177  oc.addSynonyme("rand.neighbor-dist4", "rand-neighbor-dist4", true);
178  oc.addSynonyme("rand.neighbor-dist4", "dist4");
179  oc.addDescription("rand.neighbor-dist4", "Random Network", "Probability for a node having exactly 4 neighbors");
180 
181  oc.doRegister("rand.neighbor-dist5", new Option_Float(2));
182  oc.addSynonyme("rand.neighbor-dist5", "rand-neighbor-dist5", true);
183  oc.addSynonyme("rand.neighbor-dist5", "dist5");
184  oc.addDescription("rand.neighbor-dist5", "Random Network", "Probability for a node having exactly 5 neighbors");
185 
186  oc.doRegister("rand.neighbor-dist6", new Option_Float(1));
187  oc.addSynonyme("rand.neighbor-dist6", "rand-neighbor-dist6", true);
188  oc.addSynonyme("rand.neighbor-dist6", "dist6");
189  oc.addDescription("rand.neighbor-dist6", "Random Network", "Probability for a node having exactly 6 neighbors");
190 }
191 
192 
193 bool
196  bool ok = true;
197  // check whether exactly one type of a network to build was wished
198  int no = 0;
199  if (oc.getBool("spider")) {
200  no++;
201  }
202  if (oc.getBool("grid")) {
203  no++;
204  }
205  if (oc.getBool("rand")) {
206  no++;
207  }
208  if (no == 0) {
209  WRITE_ERROR("You have to specify the type of network to generate.");
210  ok = false;
211  }
212  if (no > 1) {
213  WRITE_ERROR("You may specify only one type of network to generate at once.");
214  ok = false;
215  }
216  // check whether the junction type to use is properly set
217  if (oc.isSet("default-junction-type")) {
218  std::string type = oc.getString("default-junction-type");
219  if (type != toString(NODETYPE_TRAFFIC_LIGHT) &&
222  type != toString(NODETYPE_PRIORITY) &&
223  type != toString(NODETYPE_PRIORITY_STOP) &&
224  type != toString(NODETYPE_ALLWAY_STOP) &&
225  type != toString(NODETYPE_ZIPPER) &&
226  type != toString(NODETYPE_NOJUNCTION) &&
227  type != toString(NODETYPE_RAIL_SIGNAL) &&
228  type != toString(NODETYPE_RAIL_CROSSING) &&
230  WRITE_ERROR("Only the following junction types are known: " +
234  toString(NODETYPE_PRIORITY) + ", " +
237  toString(NODETYPE_ZIPPER) + ", " +
238  toString(NODETYPE_NOJUNCTION) + ", " +
242  ok = false;
243  }
244  }
245  return ok;
246 }
247 
248 
249 /****************************************************************************/
250 
void doRegister(const std::string &name, Option *v)
Adds an option under the given name.
Definition: OptionsCont.cpp:86
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
static OptionsCont & getOptions()
Retrieves the options.
Definition: OptionsCont.cpp:69
void addSynonyme(const std::string &name1, const std::string &name2, bool isDeprecated=false)
Adds a synonyme for an options name (any order)
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
static bool checkOptions()
Checks set options from the OptionsCont-singleton for being valid.
Definition: NGFrame.cpp:194
#define DEG2RAD(x)
Definition: GeomHelper.h:45
std::string toString(const T &t, std::streamsize accuracy=OUTPUT_ACCURACY)
Definition: ToString.h:55
#define WRITE_ERROR(msg)
Definition: MsgHandler.h:206
An integer-option.
Definition: Option.h:313
A storage for options typed value containers)
Definition: OptionsCont.h:99
static void fillOptions()
Inserts options used by the network generator.
Definition: NGFrame.cpp:51
#define SUMOReal
Definition: config.h:214
void addDescription(const std::string &name, const std::string &subtopic, const std::string &description)
Adds a description for an option.
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.