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