Eclipse SUMO - Simulation of Urban MObility
GNELoadThread.cpp
Go to the documentation of this file.
1/****************************************************************************/
2// Eclipse SUMO, Simulation of Urban MObility; see https://eclipse.org/sumo
3// Copyright (C) 2001-2022 German Aerospace Center (DLR) and others.
4// This program and the accompanying materials are made available under the
5// terms of the Eclipse Public License 2.0 which is available at
6// https://www.eclipse.org/legal/epl-2.0/
7// This Source Code may also be made available under the following Secondary
8// Licenses when the conditions for such availability set forth in the Eclipse
9// Public License 2.0 are satisfied: GNU General Public License, version 2
10// or later which is available at
11// https://www.gnu.org/licenses/old-licenses/gpl-2.0-standalone.html
12// SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
13/****************************************************************************/
18// The thread that performs the loading of a Netedit-net (adapted from
19// GUILoadThread)
20/****************************************************************************/
21#include <netbuild/NBFrame.h>
23#include <netimport/NIFrame.h>
24#include <netimport/NILoader.h>
25#include <netwrite/NWFrame.h>
31#include <utils/xml/XMLSubSys.h>
32
34#include "GNELoadThread.h"
35#include "GNENet.h"
36
37
38// ===========================================================================
39// member method definitions
40// ===========================================================================
42 MFXSingleEventThread(app, mw), myParent(mw), myEventQue(eq),
43 myEventThrow(ev) {
50}
51
52
54 delete myDebugRetriever;
55 delete myGLDebugRetriever;
56 delete myErrorRetriever;
57 delete myMessageRetriever;
58 delete myWarningRetriever;
59}
60
61
62FXint
64 // register message callbacks
70
71 GNENet* net = nullptr;
72
73 // try to load the given configuration
75 if (oc.getString("SUMOConfig-output").empty() && (myFile != "" || oc.getString("sumo-net-file") != "")) {
76 oc.clear();
77 if (!initOptions()) {
79 return 0;
80 }
81 }
82 if (oc.isDefault("aggregate-warnings")) {
83 oc.setDefault("aggregate-warnings", "5");
84 }
86 if (!(NIFrame::checkOptions() &&
90 // options are not valid
91 WRITE_ERROR(TL("Invalid Options. Nothing loaded"));
93 return 0;
94 }
100
102 if (!GeoConvHelper::init(oc)) {
103 WRITE_ERROR(TL("Could not build projection!"));
105 return 0;
106 }
107 XMLSubSys::setValidation(oc.getString("xml-validation"), oc.getString("xml-validation.net"), oc.getString("xml-validation.routes"));
108 // check if Debug has to be enabled
109 MsgHandler::enableDebugMessages(oc.getBool("gui-testing-debug"));
110 // check if GL Debug has to be enabled
111 MsgHandler::enableDebugGLMessages(oc.getBool("gui-testing-debug-gl"));
112 // this netbuilder instance becomes the responsibility of the GNENet
113 NBNetBuilder* netBuilder = new NBNetBuilder();
114
115 netBuilder->applyOptions(oc);
116
117 if (myNewNet) {
118 // create new network
119 net = new GNENet(netBuilder);
120 } else {
121 NILoader nl(*netBuilder);
122 try {
123 nl.load(oc);
124
125 if (!myLoadNet) {
126 WRITE_MESSAGE(TL("Performing initial computation ...\n"));
127 // perform one-time processing (i.e. edge removal)
128 netBuilder->compute(oc);
129 // @todo remove one-time processing options!
130 } else {
131 // make coordinate conversion usable before first netBuilder->compute()
133 }
134
135 if (oc.getBool("ignore-errors")) {
137 }
138
139 // check whether any errors occurred
140 if (MsgHandler::getErrorInstance()->wasInformed()) {
141 throw ProcessError();
142 } else {
143 net = new GNENet(netBuilder);
144 if (oc.getBool("lefthand")) {
145 // force initial geometry computation without volatile options because the net will look strange otherwise
146 net->computeAndUpdate(oc, false);
147 }
148 }
149 if (myFile == "") {
150 if (oc.isSet("configuration-file")) {
151 myFile = oc.getString("configuration-file");
152 } else if (oc.isSet("sumo-net-file")) {
153 myFile = oc.getString("sumo-net-file");
154 }
155 }
156
157 } catch (ProcessError& e) {
158 if (std::string(e.what()) != std::string("Process Error") && std::string(e.what()) != std::string("")) {
159 WRITE_ERROR(e.what());
160 }
161 WRITE_ERROR(TL("Failed to build network."));
162 // check if delete network
163 if (net != nullptr) {
164 delete net;
165 net = nullptr;
166 }
167 delete netBuilder;
168 } catch (std::exception& e) {
169 WRITE_ERROR(e.what());
170 // check if delete network
171 if (net != nullptr) {
172 delete net;
173 net = nullptr;
174 }
175 delete netBuilder;
176 }
177 }
178 // only a single setting file is supported
179 submitEndAndCleanup(net, myNewNet, oc.getString("gui-settings-file"), oc.getBool("registry-viewport"));
180 return 0;
181}
182
183
184
185void
186GNELoadThread::submitEndAndCleanup(GNENet* net, const bool newNet, const std::string& guiSettingsFile, const bool viewportFromRegistry) {
187 // remove message callbacks
193 // inform parent about the process
194 GUIEvent* e = new GNEEvent_NetworkLoaded(net, newNet, myFile, guiSettingsFile, viewportFromRegistry);
197}
198
199
200void
202 oc.clear();
203 oc.addCallExample("--new", "start plain GUI with empty net");
204 oc.addCallExample("-s <SUMO_NET>", "edit SUMO network");
205 oc.addCallExample("-c <CONFIGURATION>", "edit net with options read from file");
206
207 SystemFrame::addConfigurationOptions(oc); // this subtopic is filled here, too
208 oc.addOptionSubTopic("Input");
209 oc.addOptionSubTopic("Output");
211 oc.addOptionSubTopic("Processing");
212 oc.addOptionSubTopic("Building Defaults");
213 oc.addOptionSubTopic("TLS Building");
214 oc.addOptionSubTopic("Ramp Guessing");
215 oc.addOptionSubTopic("Edge Removal");
216 oc.addOptionSubTopic("Unregulated Nodes");
217 oc.addOptionSubTopic("Junctions");
218 oc.addOptionSubTopic("Pedestrian");
219 oc.addOptionSubTopic("Bicycle");
220 oc.addOptionSubTopic("Railway");
221 oc.addOptionSubTopic("Formats");
222 oc.addOptionSubTopic("Netedit");
223 oc.addOptionSubTopic("Visualisation");
224 oc.addOptionSubTopic("Time");
225
226 oc.doRegister("new", new Option_Bool(false)); // !!!
227 oc.addDescription("new", "Input", "Start with a new network");
228
229 // files
230
231 oc.doRegister("SUMOConfig-output", new Option_String());
232 oc.addDescription("SUMOConfig-output", "Netedit", "file in which SUMOCOnfig must be saved");
233
234 oc.doRegister("additional-files", 'a', new Option_FileName());
235 oc.addSynonyme("additional-files", "additional");
236 oc.addDescription("additional-files", "Netedit", "Load additional and shapes descriptions from FILE(s)");
237
238 oc.doRegister("additionals-output", new Option_String());
239 oc.addDescription("additionals-output", "Netedit", "file in which additionals must be saved");
240
241 oc.doRegister("route-files", 'r', new Option_FileName());
242 oc.addSynonyme("route-files", "routes");
243 oc.addDescription("route-files", "Netedit", "Load demand elements descriptions from FILE(s)");
244
245 oc.doRegister("demandelements-output", new Option_String());
246 oc.addDescription("demandelements-output", "Netedit", "file in which demand elements must be saved");
247
248 oc.doRegister("data-files", 'd', new Option_FileName());
249 oc.addSynonyme("data-files", "data");
250 oc.addDescription("data-files", "Netedit", "Load data elements descriptions from FILE(s)");
251
252 oc.doRegister("dataelements-output", new Option_String());
253 oc.addDescription("dataelements-output", "Netedit", "file in which data elements must be saved");
254
255 oc.doRegister("TLSPrograms-output", new Option_String());
256 oc.addDescription("TLSPrograms-output", "Netedit", "file in which TLS Programs must be saved");
257
258 oc.doRegister("edgeTypes-output", new Option_String());
259 oc.addDescription("edgeTypes-output", "Netedit", "file in which edgeTypes must be saved");
260
261 // network prefixes
262
263 oc.doRegister("node-prefix", new Option_String("J"));
264 oc.addDescription("node-prefix", "Netedit", "prefix for node naming");
265
266 oc.doRegister("edge-prefix", new Option_String("E"));
267 oc.addDescription("edge-prefix", "Netedit", "prefix for edge naming");
268
269 oc.doRegister("edge-infix", new Option_String(""));
270 oc.addDescription("edge-infix", "Netedit", "enable edge-infix (<fromNodeID><infix><toNodeID>)");
271
272 // additional prefixes
273
274 oc.doRegister("busStop-prefix", new Option_String("bs"));
275 oc.addDescription("busStop-prefix", "Netedit", "prefix for busStop naming");
276
277 oc.doRegister("trainStop-prefix", new Option_String("ts"));
278 oc.addDescription("trainStop-prefix", "Netedit", "prefix for trainStop naming");
279
280 oc.doRegister("containerStop-prefix", new Option_String("ct"));
281 oc.addDescription("containerStop-prefix", "Netedit", "prefix for containerStop naming");
282
283 oc.doRegister("chargingStation-prefix", new Option_String("cs"));
284 oc.addDescription("chargingStation-prefix", "Netedit", "prefix for chargingStation naming");
285
286 oc.doRegister("parkingArea-prefix", new Option_String("pa"));
287 oc.addDescription("parkingArea-prefix", "Netedit", "prefix for parkingArea naming");
288
289 oc.doRegister("e1Detector-prefix", new Option_String("e1"));
290 oc.addDescription("e1Detector-prefix", "Netedit", "prefix for e1Detector naming");
291
292 oc.doRegister("e2Detector-prefix", new Option_String("e2"));
293 oc.addDescription("e2Detector-prefix", "Netedit", "prefix for e2Detector naming");
294
295 oc.doRegister("e3Detector-prefix", new Option_String("e3"));
296 oc.addDescription("e3Detector-prefix", "Netedit", "prefix for e3Detector naming");
297
298 oc.doRegister("e1InstantDetector-prefix", new Option_String("e1i"));
299 oc.addDescription("e1InstantDetector-prefix", "Netedit", "prefix for e1InstantDetector naming");
300
301 oc.doRegister("rerouter-prefix", new Option_String("rr"));
302 oc.addDescription("rerouter-prefix", "Netedit", "prefix for rerouter naming");
303
304 oc.doRegister("calibrator-prefix", new Option_String("ca"));
305 oc.addDescription("calibrator-prefix", "Netedit", "prefix for calibrator naming");
306
307 oc.doRegister("routeProbe-prefix", new Option_String("rp"));
308 oc.addDescription("routeProbe-prefix", "Netedit", "prefix for routeProbe naming");
309
310 oc.doRegister("vss-prefix", new Option_String("vs"));
311 oc.addDescription("vss-prefix", "Netedit", "prefix for variable speed sign naming");
312
313 oc.doRegister("tractionSubstation-prefix", new Option_String("tr"));
314 oc.addDescription("tractionSubstation-prefix", "Netedit", "prefix for traction substation naming");
315
316 oc.doRegister("overheadWire-prefix", new Option_String("ow"));
317 oc.addDescription("overheadWire-prefix", "Netedit", "prefix for overhead wire naming");
318
319 oc.doRegister("polygon-prefix", new Option_String("po"));
320 oc.addDescription("polygon-prefix", "Netedit", "prefix for polygon naming");
321
322 oc.doRegister("poi-prefix", new Option_String("poi"));
323 oc.addDescription("poi-prefix", "Netedit", "prefix for poi naming");
324
325 // demand prefixes
326
327 oc.doRegister("route-prefix", new Option_String("r"));
328 oc.addDescription("route-prefix", "Netedit", "prefix for route naming");
329
330 oc.doRegister("vType-prefix", new Option_String("t"));
331 oc.addDescription("vType-prefix", "Netedit", "prefix for vType naming");
332
333 oc.doRegister("vehicle-prefix", new Option_String("v"));
334 oc.addDescription("vehicle-prefix", "Netedit", "prefix for vehicle naming");
335
336 oc.doRegister("trip-prefix", new Option_String("t"));
337 oc.addDescription("trip-prefix", "Netedit", "prefix for trip naming");
338
339 oc.doRegister("flow-prefix", new Option_String("f"));
340 oc.addDescription("flow-prefix", "Netedit", "prefix for flow naming");
341
342 oc.doRegister("person-prefix", new Option_String("p"));
343 oc.addDescription("person-prefix", "Netedit", "prefix for person naming");
344
345 oc.doRegister("personflow-prefix", new Option_String("pf"));
346 oc.addDescription("personflow-prefix", "Netedit", "prefix for personFlow naming");
347
348 oc.doRegister("container-prefix", new Option_String("c"));
349 oc.addDescription("container-prefix", "Netedit", "prefix for container naming");
350
351 oc.doRegister("containerflow-prefix", new Option_String("cf"));
352 oc.addDescription("containerflow-prefix", "Netedit", "prefix for containerFlow naming");
353
354 // drawing
355
356 oc.doRegister("disable-laneIcons", new Option_Bool(false));
357 oc.addDescription("disable-laneIcons", "Visualisation", "Disable icons of special lanes");
358
359 oc.doRegister("disable-textures", 'T', new Option_Bool(false)); // !!!
360 oc.addDescription("disable-textures", "Visualisation", "");
361
362 oc.doRegister("gui-settings-file", 'g', new Option_FileName());
363 oc.addDescription("gui-settings-file", "Visualisation", "Load visualisation settings from FILE");
364
365 oc.doRegister("registry-viewport", new Option_Bool(false));
366 oc.addDescription("registry-viewport", "Visualisation", "Load current viewport from registry");
367
368 oc.doRegister("window-size", new Option_StringVector());
369 oc.addDescription("window-size", "Visualisation", "Create initial window with the given x,y size");
370
371 oc.doRegister("window-pos", new Option_StringVector());
372 oc.addDescription("window-pos", "Visualisation", "Create initial window at the given x,y position");
373
374 // testing
375
376 oc.doRegister("gui-testing", new Option_Bool(false));
377 oc.addDescription("gui-testing", "Visualisation", "Enable overlay for screen recognition");
378
379 oc.doRegister("gui-testing-debug", new Option_Bool(false));
380 oc.addDescription("gui-testing-debug", "Visualisation", "Enable output messages during GUI-Testing");
381
382 oc.doRegister("gui-testing-debug-gl", new Option_Bool(false));
383 oc.addDescription("gui-testing-debug-gl", "Visualisation", "Enable output messages during GUI-Testing specific of gl functions");
384
385 oc.doRegister("gui-testing.setting-output", new Option_FileName());
386 oc.addDescription("gui-testing.setting-output", "Visualisation", "Save gui settings in the given settings-output file");
387
388 // register the simulation settings (needed for GNERouteHandler)
389 oc.doRegister("begin", new Option_String("0", "TIME"));
390 oc.addDescription("begin", "Time", "Defines the begin time in seconds; The simulation starts at this time");
391
392 oc.doRegister("end", new Option_String("-1", "TIME"));
393 oc.addDescription("end", "Time", "Defines the end time in seconds; The simulation ends at this time");
394
395 oc.doRegister("default.action-step-length", new Option_Float(0.0));
396 oc.addDescription("default.action-step-length", "Processing", "Length of the default interval length between action points for the car-following and lane-change models (in seconds). If not specified, the simulation step-length is used per default. Vehicle- or VType-specific settings override the default. Must be a multiple of the simulation step-length.");
397
398 oc.doRegister("default.speeddev", new Option_Float(-1));
399 oc.addDescription("default.speeddev", "Processing", "Select default speed deviation. A negative value implies vClass specific defaults (0.1 for the default passenger class");
400
405}
406
407
408void
410 oc.resetWritable();
411 oc.set("offset.disable-normalization", "true"); // preserve the given network as far as possible
412 oc.set("no-turnarounds", "true"); // otherwise it is impossible to manually removed turn-arounds
413}
414
415
416bool
419 // fill all options
420 fillOptions(oc);
421 // set manually the net file
422 if (myFile != "") {
423 if (myLoadNet) {
424 oc.set("sumo-net-file", myFile);
425 } else {
426 oc.set("configuration-file", myFile);
427 }
428 }
429 // set default options defined in GNELoadThread::setDefaultOptions(...)
431 try {
432 // set all values writable, because certain attributes already setted can be updated through console
433 oc.resetWritable();
434 // load options from console
436 // if output file wasn't defined in the command line manually, set value of "sumo-net-file"
437 if (!oc.isSet("output-file")) {
438 oc.set("output-file", oc.getString("sumo-net-file"));
439 }
440 return true;
441 } catch (ProcessError& e) {
442 if (std::string(e.what()) != std::string("Process Error") && std::string(e.what()) != std::string("")) {
443 WRITE_ERROR(e.what());
444 }
445 WRITE_ERROR(TL("Failed to parse options."));
446 return false;
447 }
448}
449
450
451void
452GNELoadThread::loadConfigOrNet(const std::string& file, const bool isNet, const bool useStartupOptions, const bool newNet) {
453 myFile = file;
454 myLoadNet = isNet;
455 if (myFile != "" && !useStartupOptions) {
456 OptionsIO::setArgs(0, nullptr);
457 }
458 myNewNet = newNet;
459 start();
460}
461
462
463void
464GNELoadThread::retrieveMessage(const MsgHandler::MsgType type, const std::string& msg) {
465 GUIEvent* e = new GUIEvent_Message(type, msg);
468}
469
470
471/****************************************************************************/
#define WRITE_MESSAGE(msg)
Definition: MsgHandler.h:267
#define WRITE_ERROR(msg)
Definition: MsgHandler.h:274
#define TL(string)
Definition: MsgHandler.h:282
OutputDevice * myErrorRetriever
The instances of message retriever encapsulations Needed to be deleted from the handler later on.
Definition: GNELoadThread.h:90
void retrieveMessage(const MsgHandler::MsgType type, const std::string &msg)
Retrieves messages from the loading module.
void loadConfigOrNet(const std::string &file, const bool isNet, const bool useStartupOptions, const bool newNet=false)
begins the loading of a netconvert configuration or a a network
OutputDevice * myWarningRetriever
Definition: GNELoadThread.h:90
GNELoadThread(FXApp *app, MFXInterThreadEventClient *mw, MFXSynchQue< GUIEvent * > &eq, FXEX::MFXThreadEvent &ev)
constructor
bool myNewNet
if true, a new net is created
OutputDevice * myMessageRetriever
Definition: GNELoadThread.h:90
virtual ~GNELoadThread()
destructor
MFXSynchQue< GUIEvent * > & myEventQue
event Queue
Definition: GNELoadThread.h:93
OutputDevice * myGLDebugRetriever
Definition: GNELoadThread.h:90
std::string myFile
the path to load the network from
Definition: GNELoadThread.h:87
OutputDevice * myDebugRetriever
Definition: GNELoadThread.h:90
static void fillOptions(OptionsCont &oc)
clears and initializes the OptionsCont
bool initOptions()
init options
bool myLoadNet
Information whether only the network shall be loaded.
Definition: GNELoadThread.h:99
FXEX::MFXThreadEvent & myEventThrow
event throw
Definition: GNELoadThread.h:96
static void setDefaultOptions(OptionsCont &oc)
sets required options for proper functioning
FXint run()
starts the thread. The thread ends after the net has been loaded
void submitEndAndCleanup(GNENet *net, const bool newNet=false, const std::string &guiSettingsFile="", const bool viewportFromRegistry=false)
Closes the loading process.
A NBNetBuilder extended by visualisation and editing capabilities.
Definition: GNENet.h:42
void computeAndUpdate(OptionsCont &oc, bool volatileOptions)
recompute the network and update lane geometries
Definition: GNENet.cpp:2697
static void addProjectionOptions(OptionsCont &oc)
Adds projection options to the given container.
static bool init(OptionsCont &oc)
Initialises the processing and the final instance using the given options.
static void computeFinal(bool lefthand=false)
compute the location attributes which will be used for output based on the loaded location data,...
void push_back(T what)
Definition: MFXSynchQue.h:114
virtual void addRetriever(OutputDevice *retriever)
Adds a further retriever to the instance responsible for a certain msg type.
Definition: MsgHandler.cpp:185
static MsgHandler * getGLDebugInstance()
Returns the instance to add GLdebug to.
Definition: MsgHandler.cpp:97
static MsgHandler * getErrorInstance()
Returns the instance to add errors to.
Definition: MsgHandler.cpp:79
static void enableDebugGLMessages(bool enable)
enable/disable gl-debug messages
Definition: MsgHandler.cpp:111
static void initOutputOptions()
init output options
Definition: MsgHandler.cpp:255
static MsgHandler * getDebugInstance()
Returns the instance to add debug to.
Definition: MsgHandler.cpp:88
static MsgHandler * getWarningInstance()
Returns the instance to add warnings to.
Definition: MsgHandler.cpp:66
static void enableDebugMessages(bool enable)
enable/disable debug messages
Definition: MsgHandler.cpp:106
virtual void clear(bool resetInformed=true)
Clears information whether an error occurred previously and print aggregated message summary.
Definition: MsgHandler.cpp:161
virtual void removeRetriever(OutputDevice *retriever)
Removes the retriever from the handler.
Definition: MsgHandler.cpp:193
@ MT_GLDEBUG
The message is GL debug output.
@ MT_DEBUG
The message is debug output.
@ MT_MESSAGE
The message is only something to show.
@ MT_ERROR
The message is an error.
@ MT_WARNING
The message is a warning.
static MsgHandler * getMessageInstance()
Returns the instance to add normal messages to.
Definition: MsgHandler.cpp:53
Encapsulates an object's method for using it as a message retriever.
static bool checkOptions()
Checks set options from the OptionsCont-singleton for being valid.
Definition: NBFrame.cpp:696
static void fillOptions(bool forNetgen)
Inserts options used by the network converter.
Definition: NBFrame.cpp:47
Instance responsible for building networks.
Definition: NBNetBuilder.h:107
void applyOptions(OptionsCont &oc)
Initialises the storage by applying given options.
void compute(OptionsCont &oc, const std::set< std::string > &explicitTurnarounds=std::set< std::string >(), bool mayAddOrRemove=true)
Performs the network building steps.
static bool checkOptions()
Checks set options from the OptionsCont-singleton for being valid.
Definition: NIFrame.cpp:370
static void fillOptions(bool forNetedit=false)
Inserts options used by the network importer and network building modules.
Definition: NIFrame.cpp:47
Perfoms network import.
Definition: NILoader.h:48
void load(OptionsCont &oc)
Definition: NILoader.cpp:70
static void fillOptions(bool forNetgen)
Inserts options used by the network writer.
Definition: NWFrame.cpp:48
static bool checkOptions()
Checks set options from the OptionsCont-singleton for being valid.
Definition: NWFrame.cpp:125
A storage for options typed value containers)
Definition: OptionsCont.h:89
void addDescription(const std::string &name, const std::string &subtopic, const std::string &description)
Adds a description for an option.
void doRegister(const std::string &name, Option *v)
Adds an option under the given name.
Definition: OptionsCont.cpp:76
bool isSet(const std::string &name, bool failOnNonExistant=true) const
Returns the information whether the named option is set.
std::string getString(const std::string &name) const
Returns the string-value of the named option (only for Option_String)
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:97
bool isDefault(const std::string &name) const
Returns the information whether the named option has still the default value.
bool setDefault(const std::string &name, const std::string &value)
Sets the given value for the named option as new default value.
void clear()
Removes all information from the container.
bool set(const std::string &name, const std::string &value, const bool append=false)
Sets the given value for the named option.
void addOptionSubTopic(const std::string &topic)
Adds an option subtopic.
bool getBool(const std::string &name) const
Returns the boolean-value of the named option (only for Option_Bool)
void resetWritable()
Resets all options to be writeable.
static OptionsCont & getOptions()
Retrieves the options.
Definition: OptionsCont.cpp:59
void addCallExample(const std::string &example, const std::string &desc)
Add a call example.
static void setArgs(int argc, char **argv)
Stores the command line arguments for later parsing.
Definition: OptionsIO.cpp:58
static void getOptions(const bool commandLineOnly=false)
Parses the command line arguments and loads the configuration.
Definition: OptionsIO.cpp:74
static void insertRandOptions()
Initialises the given options container with random number options.
Definition: RandHelper.cpp:58
static void initRandGlobal(SumoRNG *which=nullptr)
Reads the given random number options and initialises the random number generator in accordance.
Definition: RandHelper.cpp:87
static void addConfigurationOptions(OptionsCont &oc)
Adds configuration options to the given container.
Definition: SystemFrame.cpp:38
static bool checkOptions()
checks shared options and sets StdDefs
static void setValidation(const std::string &validationScheme, const std::string &netValidationScheme, const std::string &routeValidationScheme)
Enables or disables validation.
Definition: XMLSubSys.cpp:65