void GNETLSEditorFrame::buildIinternalLanes(NBTrafficLightDefinition* tlDef) { // clean up previous objects SUMORTree& rtree = myViewNet->getNet()->getVisualisationSpeedUp(); for (TLIndexMap::iterator it = myInternalLanes.begin(); it != myInternalLanes.end(); it++) { std::vector<GNEInternalLane*> lanes = it->second; for (std::vector<GNEInternalLane*>::iterator it_lane = lanes.begin(); it_lane != lanes.end(); it_lane++) { rtree.removeAdditionalGLObject(*it_lane); delete *it_lane; } } myInternalLanes.clear(); if (tlDef != 0) { const int NUM_POINTS = 10; assert(myCurrentJunction); SUMORTree& rtree = myViewNet->getNet()->getVisualisationSpeedUp(); NBNode* nbn = myCurrentJunction->getNBNode(); std::string innerID = ":" + nbn->getID(); // see NWWriter_SUMO::writeInternalEdges const NBConnectionVector& links = tlDef->getControlledLinks(); for (NBConnectionVector::const_iterator it = links.begin(); it != links.end(); it++) { int tlIndex = it->getTLIndex(); PositionVector shape = nbn->computeInternalLaneShape(it->getFrom(), NBEdge::Connection(it->getFromLane(), it->getTo(), it->getToLane()), NUM_POINTS); GNEInternalLane* ilane = new GNEInternalLane(this, innerID + '_' + toString(tlIndex), shape, tlIndex); rtree.addAdditionalGLObject(ilane); myInternalLanes[tlIndex].push_back(ilane); } const std::vector<NBNode::Crossing>& crossings = nbn->getCrossings(); for (std::vector<NBNode::Crossing>::const_iterator it = crossings.begin(); it != crossings.end(); it++) { const NBNode::Crossing& c = *it; GNEInternalLane* ilane = new GNEInternalLane(this, c.id, c.shape, c.tlLinkNo); rtree.addAdditionalGLObject(ilane); myInternalLanes[c.tlLinkNo].push_back(ilane); } } }