SUMO - Simulation of Urban MObility
|
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