SUMO - Simulation of Urban MObility

NGFrame.cpp

Go to the documentation of this file.
00001 /****************************************************************************/
00007 // Sets and checks options for netgen
00008 /****************************************************************************/
00009 // SUMO, Simulation of Urban MObility; see http://sumo.sourceforge.net/
00010 // Copyright (C) 2001-2011 DLR (http://www.dlr.de/) and contributors
00011 /****************************************************************************/
00012 //
00013 //   This program is free software; you can redistribute it and/or modify
00014 //   it under the terms of the GNU General Public License as published by
00015 //   the Free Software Foundation; either version 2 of the License, or
00016 //   (at your option) any later version.
00017 //
00018 /****************************************************************************/
00019 
00020 
00021 // ===========================================================================
00022 // included modules
00023 // ===========================================================================
00024 #ifdef _MSC_VER
00025 #include <windows_config.h>
00026 #else
00027 #include <config.h>
00028 #endif
00029 
00030 #include <string>
00031 #include "NGFrame.h"
00032 #include <netbuild/NBNetBuilder.h>
00033 #include <utils/options/Option.h>
00034 #include <utils/options/OptionsCont.h>
00035 #include <utils/common/MsgHandler.h>
00036 #include <utils/common/SystemFrame.h>
00037 #include <utils/common/ToString.h>
00038 
00039 #ifdef CHECK_MEMORY_LEAKS
00040 #include <foreign/nvwa/debug_new.h>
00041 #endif // CHECK_MEMORY_LEAKS
00042 
00043 
00044 // ===========================================================================
00045 // method definitions
00046 // ===========================================================================
00047 void
00048 NGFrame::fillOptions() {
00049     OptionsCont& oc = OptionsCont::getOptions();
00050     //  register grid-net options
00051     oc.doRegister("grid", 'g', new Option_Bool(false));
00052     oc.addSynonyme("grid", "grid-net", true);
00053     oc.addDescription("grid", "Grid Network", "Forces NETGEN to build a grid-like network");
00054 
00055     oc.doRegister("grid.number", new Option_Integer(5));
00056     oc.addSynonyme("grid.number", "grid-number", true);
00057     oc.addSynonyme("grid.number", "number");
00058     oc.addDescription("grid.number", "Grid Network", "The number of junctions in both dirs");
00059 
00060     oc.doRegister("grid.length", new Option_Float(100));
00061     oc.addSynonyme("grid.length", "grid-length", true);
00062     oc.addSynonyme("grid.length", "length");
00063     oc.addDescription("grid.length", "Grid Network", "The length of streets in both dirs");
00064 
00065     oc.doRegister("grid.x-number", new Option_Integer(5));
00066     oc.addSynonyme("grid.x-number", "grid-x-number", true);
00067     oc.addSynonyme("grid.x-number", "x-no");
00068     oc.addDescription("grid.x-number", "Grid Network", "The number of junctions in x-dir; Overrides --grid-number");
00069 
00070     oc.doRegister("grid.y-number", new Option_Integer(5));
00071     oc.addSynonyme("grid.y-number", "grid-y-number", true);
00072     oc.addSynonyme("grid.y-number", "y-no");
00073     oc.addDescription("grid.y-number", "Grid Network", "The number of junctions in y-dir; Overrides --grid-number");
00074 
00075     oc.doRegister("grid.x-length", new Option_Float(100));
00076     oc.addSynonyme("grid.x-length", "grid-x-length", true);
00077     oc.addSynonyme("grid.x-length", "x-length");
00078     oc.addDescription("grid.x-length", "Grid Network", "The length of horizontal streets; Overrides --grid-length");
00079 
00080     oc.doRegister("grid.y-length", new Option_Float(100));
00081     oc.addSynonyme("grid.y-length", "grid-y-length", true);
00082     oc.addSynonyme("grid.y-length", "y-length");
00083     oc.addDescription("grid.y-length", "Grid Network", "The length of vertical streets; Overrides --grid-length");
00084 
00085     oc.doRegister("grid.attach-length", new Option_Float(0));
00086     oc.addSynonyme("grid.attach-length", "attach-length", true);
00087     oc.addDescription("grid.attach-length", "Grid Network", "The length of streets attached at the boundary; 0 means no streets are attached");
00088 
00089 
00090     //  register spider-net options
00091     oc.doRegister("spider", 's', new Option_Bool(false));
00092     oc.addSynonyme("spider", "spider-net", true);
00093     oc.addDescription("spider", "Spider Network", "Forces NETGEN to build a spider-net-like network");
00094 
00095     oc.doRegister("spider.arm-number", new Option_Integer(13));
00096     oc.addSynonyme("spider.arm-number", "spider-arm-number", true);
00097     oc.addSynonyme("spider.arm-number", "arms");
00098     oc.addDescription("spider.arm-number", "Spider Network", "The number of axes within the net");
00099 
00100     oc.doRegister("spider.circle-number", new Option_Integer(20));
00101     oc.addSynonyme("spider.circle-number", "spider-circle-number", true);
00102     oc.addSynonyme("spider.circle-number", "circles");
00103     oc.addDescription("spider.circle-number", "Spider Network", "The number of circles of the net");
00104 
00105     oc.doRegister("spider.space-radius", new Option_Float(100));
00106     oc.addSynonyme("spider.space-radius", "spider-space-rad", true);
00107     oc.addSynonyme("spider.space-radius", "radius");
00108     oc.addDescription("spider.space-radius", "Spider Network", "The distances between the circles");
00109 
00110     oc.doRegister("spider.omit-center", new Option_Bool(false));
00111     oc.addSynonyme("spider.omit-center", "spider-omit-center", true);
00112     oc.addSynonyme("spider.omit-center", "nocenter");
00113     oc.addDescription("spider.omit-center", "Spider Network", "Omit the central node of the network");
00114 
00115 
00116     //  register random-net options
00117     oc.doRegister("rand", 'r', new Option_Bool(false));
00118     oc.addSynonyme("rand", "random-net", true);
00119     oc.addDescription("rand", "Random Network", "Forces NETGEN to build a random network");
00120 
00121     oc.doRegister("rand.iterations", new Option_Integer(2000));
00122     oc.addSynonyme("rand.iterations", "rand-iterations", true);
00123     oc.addSynonyme("rand.iterations", "iterations");
00124     oc.addDescription("rand.iterations", "Random Network", "Describes how many times an edge shall be added to the net");
00125 
00126     oc.doRegister("rand.bidi-probability", new Option_Float(1));
00127     oc.addSynonyme("rand.bidi-probability", "rand-bidi-probability", true);
00128     oc.addSynonyme("rand.bidi-probability", "bidi");
00129     oc.addDescription("rand.bidi-probability", "Random Network", "Defines the probability to build a reverse edge");
00130 
00131     oc.doRegister("rand.max-distance", new Option_Float(250));
00132     oc.addSynonyme("rand.max-distance", "rand-max-distance", true);
00133     oc.addSynonyme("rand.max-distance", "max-dist");
00134     oc.addDescription("rand.max-distance", "Random Network", "");
00135 
00136     oc.doRegister("rand.min-distance", new Option_Float(100));
00137     oc.addSynonyme("rand.min-distance", "rand-min-distance", true);
00138     oc.addSynonyme("rand.min-distance", "min-dist");
00139     oc.addDescription("rand.min-distance", "Random Network", "");
00140 
00141     oc.doRegister("rand.min-angle", new Option_Float((SUMOReal)(45.0/180.0*PI)));
00142     oc.addSynonyme("rand.min-angle", "rand-min-anglee", true);
00143     oc.addSynonyme("rand.min-angle", "min-angle");
00144     oc.addDescription("rand.min-angle", "Random Network", "");
00145 
00146     oc.doRegister("rand.num-tries", new Option_Integer(50));
00147     oc.addSynonyme("rand.num-tries", "rand-num-tries", true);
00148     oc.addSynonyme("rand.num-tries", "num-tries");
00149     oc.addDescription("rand.num-tries", "Random Network", "");
00150 
00151     oc.doRegister("rand.connectivity", new Option_Float((SUMOReal) 0.95));
00152     oc.addSynonyme("rand.connectivity", "rand-connectivity", true);
00153     oc.addSynonyme("rand.connectivity", "connectivity");
00154     oc.addDescription("rand.connectivity", "Random Network", "");
00155 
00156     oc.doRegister("rand.neighbor-dist1", new Option_Float(0));
00157     oc.addSynonyme("rand.neighbor-dist1", "rand-neighbor-dist1", true);
00158     oc.addSynonyme("rand.neighbor-dist1", "dist1");
00159     oc.addDescription("rand.neighbor-dist1", "Random Network", "");
00160 
00161     oc.doRegister("rand.neighbor-dist2", new Option_Float(0));
00162     oc.addSynonyme("rand.neighbor-dist2", "rand-neighbor-dist2", true);
00163     oc.addSynonyme("rand.neighbor-dist2", "dist2");
00164     oc.addDescription("rand.neighbor-dist2", "Random Network", "");
00165 
00166     oc.doRegister("rand.neighbor-dist3", new Option_Float(10));
00167     oc.addSynonyme("rand.neighbor-dist3", "rand-neighbor-dist3", true);
00168     oc.addSynonyme("rand.neighbor-dist3", "dist3");
00169     oc.addDescription("rand.neighbor-dist3", "Random Network", "");
00170 
00171     oc.doRegister("rand.neighbor-dist4", new Option_Float(10));
00172     oc.addSynonyme("rand.neighbor-dist4", "rand-neighbor-dist4", true);
00173     oc.addSynonyme("rand.neighbor-dist4", "dist4");
00174     oc.addDescription("rand.neighbor-dist4", "Random Network", "");
00175 
00176     oc.doRegister("rand.neighbor-dist5", new Option_Float(2));
00177     oc.addSynonyme("rand.neighbor-dist5", "rand-neighbor-dist5", true);
00178     oc.addSynonyme("rand.neighbor-dist5", "dist5");
00179     oc.addDescription("rand.neighbor-dist5", "Random Network", "");
00180 
00181     oc.doRegister("rand.neighbor-dist6", new Option_Float(1));
00182     oc.addSynonyme("rand.neighbor-dist6", "rand-neighbor-dist6", true);
00183     oc.addSynonyme("rand.neighbor-dist6", "dist6");
00184     oc.addDescription("rand.neighbor-dist6", "Random Network", "");
00185 }
00186 
00187 
00188 bool
00189 NGFrame::checkOptions() {
00190     OptionsCont& oc = OptionsCont::getOptions();
00191     bool ok = true;
00192     // check whether exactly one type of a network to build was wished
00193     int no = 0;
00194     if (oc.getBool("spider")) {
00195         no++;
00196     }
00197     if (oc.getBool("grid")) {
00198         no++;
00199     }
00200     if (oc.getBool("rand")) {
00201         no++;
00202     }
00203     if (no==0) {
00204         WRITE_ERROR("You have to specify the type of network to generate.");
00205         ok = false;
00206     }
00207     if (no>1) {
00208         WRITE_ERROR("You may specify only one type of network to generate at once.");
00209         ok = false;
00210     }
00211     // check whether the junction type to use is properly set
00212     if (oc.isSet("default-junction-type")) {
00213         std::string type = oc.getString("default-junction-type");
00214         if (type != toString(NODETYPE_TRAFFIC_LIGHT) &&
00215                 type != toString(NODETYPE_PRIORITY_JUNCTION) &&
00216                 type != toString(NODETYPE_RIGHT_BEFORE_LEFT)) {
00217             WRITE_ERROR("Only the following junction types are known: " +
00218                         toString(NODETYPE_TRAFFIC_LIGHT) + ", " +
00219                         toString(NODETYPE_PRIORITY_JUNCTION) + ", " +
00220                         toString(NODETYPE_RIGHT_BEFORE_LEFT));
00221             ok = false;
00222         }
00223     }
00224     return ok;
00225 }
00226 
00227 
00228 /****************************************************************************/
00229 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Friends Defines