本文整理汇总了C++中NBEdge::setAsMacroscopicConnector方法的典型用法代码示例。如果您正苦于以下问题:C++ NBEdge::setAsMacroscopicConnector方法的具体用法?C++ NBEdge::setAsMacroscopicConnector怎么用?C++ NBEdge::setAsMacroscopicConnector使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类NBEdge
的用法示例。
在下文中一共展示了NBEdge::setAsMacroscopicConnector方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: getNamedNode
void
NIImporter_VISUM::parse_Connectors() {
if (OptionsCont::getOptions().getBool("visum.no-connectors")) {
// do nothing, if connectors shall not be imported
return;
}
// get the source district
std::string bez = NBHelpers::normalIDRepresentation(myLineParser.get("BezNr"));
// get the destination node
NBNode* dest = getNamedNode("KnotNr");
if (dest == 0) {
return;
}
// get the weight of the connection
SUMOReal proz = getWeightedFloat("Proz");
if (proz > 0) {
proz /= 100.;
} else {
proz = 1;
}
// get the duration to wait (unused)
// SUMOReal retard = -1;
// if (myLineParser.know("t0-IV")) {
// retard = getNamedFloat("t0-IV", -1);
// }
// get the type;
// use a standard type with a large speed when a type is not given
std::string type = myLineParser.know("Typ")
? NBHelpers::normalIDRepresentation(myLineParser.get("Typ"))
: "";
// add the connectors as an edge
std::string id = bez + "-" + dest->getID();
// get the information whether this is a sink or a source
std::string dir = myLineParser.get("Richtung");
if (dir.length() == 0) {
dir = "QZ";
}
// build the source when needed
if (dir.find('Q') != std::string::npos) {
const EdgeVector& edges = dest->getOutgoingEdges();
bool hasContinuation = false;
for (EdgeVector::const_iterator i = edges.begin(); i != edges.end(); ++i) {
if (!(*i)->isMacroscopicConnector()) {
hasContinuation = true;
}
}
if (!hasContinuation) {
// obviously, there is no continuation on the net
WRITE_WARNING("Incoming connector '" + id + "' will not be build - would be not connected to network.");
} else {
NBNode* src = buildDistrictNode(bez, dest, true);
if (src == 0) {
WRITE_ERROR("The district '" + bez + "' could not be built.");
return;
}
NBEdge* edge = new NBEdge(id, src, dest, "VisumConnector",
OptionsCont::getOptions().getFloat("visum.connector-speeds"),
OptionsCont::getOptions().getInt("visum.connectors-lane-number"),
-1, NBEdge::UNSPECIFIED_WIDTH, NBEdge::UNSPECIFIED_OFFSET,
"", LANESPREAD_RIGHT);
edge->setAsMacroscopicConnector();
if (!myNetBuilder.getEdgeCont().insert(edge)) {
WRITE_ERROR("A duplicate edge id occured (ID='" + id + "').");
return;
}
edge = myNetBuilder.getEdgeCont().retrieve(id);
if (edge != 0) {
myNetBuilder.getDistrictCont().addSource(bez, edge, proz);
}
}
}
// build the sink when needed
if (dir.find('Z') != std::string::npos) {
const EdgeVector& edges = dest->getIncomingEdges();
bool hasPredeccessor = false;
for (EdgeVector::const_iterator i = edges.begin(); i != edges.end(); ++i) {
if (!(*i)->isMacroscopicConnector()) {
hasPredeccessor = true;
}
}
if (!hasPredeccessor) {
// obviously, the network is not connected to this node
WRITE_WARNING("Outgoing connector '" + id + "' will not be build - would be not connected to network.");
} else {
NBNode* src = buildDistrictNode(bez, dest, false);
if (src == 0) {
WRITE_ERROR("The district '" + bez + "' could not be built.");
return;
}
id = "-" + id;
NBEdge* edge = new NBEdge(id, dest, src, "VisumConnector",
OptionsCont::getOptions().getFloat("visum.connector-speeds"),
OptionsCont::getOptions().getInt("visum.connectors-lane-number"),
-1, NBEdge::UNSPECIFIED_WIDTH, NBEdge::UNSPECIFIED_OFFSET,
"", LANESPREAD_RIGHT);
edge->setAsMacroscopicConnector();
if (!myNetBuilder.getEdgeCont().insert(edge)) {
WRITE_ERROR("A duplicate edge id occured (ID='" + id + "').");
return;
}
//.........这里部分代码省略.........