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