void RODFDetectorCon::writeEmitterPOIs(const std::string& file, const RODFDetectorFlows& flows) { OutputDevice& out = OutputDevice::getDevice(file); out.writeXMLHeader("additional"); for (std::vector<RODFDetector*>::const_iterator i = myDetectors.begin(); i != myDetectors.end(); ++i) { RODFDetector* det = *i; SUMOReal flow = flows.getFlowSumSecure(det->getID()); const unsigned char col = static_cast<unsigned char>(128 * flow / flows.getMaxDetectorFlow() + 128); out.openTag(SUMO_TAG_POI).writeAttr(SUMO_ATTR_ID, StringUtils::escapeXML((*i)->getID()) + ":" + toString(flow)); switch ((*i)->getType()) { case BETWEEN_DETECTOR: out.writeAttr(SUMO_ATTR_TYPE, "between_detector_position").writeAttr(SUMO_ATTR_COLOR, RGBColor(0, 0, col, 255)); break; case SOURCE_DETECTOR: out.writeAttr(SUMO_ATTR_TYPE, "source_detector_position").writeAttr(SUMO_ATTR_COLOR, RGBColor(0, col, 0, 255)); break; case SINK_DETECTOR: out.writeAttr(SUMO_ATTR_TYPE, "sink_detector_position").writeAttr(SUMO_ATTR_COLOR, RGBColor(col, 0, 0, 255)); break; case DISCARDED_DETECTOR: out.writeAttr(SUMO_ATTR_TYPE, "discarded_detector_position").writeAttr(SUMO_ATTR_COLOR, RGBColor(51, 51, 51, 255)); break; default: throw 1; } out.writeAttr(SUMO_ATTR_LANE, (*i)->getLaneID()).writeAttr(SUMO_ATTR_POSITION, (*i)->getPos()).closeTag(); } out.close(); }
void RODFDetectorCon::writeEmitterPOIs(const std::string& file, const RODFDetectorFlows& flows) { OutputDevice& out = OutputDevice::getDevice(file); out.writeXMLHeader("additional"); for (std::vector<RODFDetector*>::const_iterator i = myDetectors.begin(); i != myDetectors.end(); ++i) { RODFDetector* det = *i; SUMOReal flow = flows.getFlowSumSecure(det->getID()); SUMOReal col = flow / flows.getMaxDetectorFlow(); col = (SUMOReal)(col / 2. + .5); SUMOReal r, g, b; r = g = b = 0; out << " <poi id=\"" << StringUtils::escapeXML((*i)->getID()) << ":" << flow; switch ((*i)->getType()) { case BETWEEN_DETECTOR: out << "\" type=\"between_detector_position\" color=\"0,0," << col << "\""; break; case SOURCE_DETECTOR: out << "\" type=\"source_detector_position\" color=\"0," << col << ",0\""; break; case SINK_DETECTOR: out << "\" type=\"sink_detector_position\" color=\"" << col << ",0,0\""; break; case DISCARDED_DETECTOR: out << "\" type=\"discarded_detector_position\" color=\".2,.2,.2\""; break; default: throw 1; } out << " lane=\"" << (*i)->getLaneID() << "\" pos=\"" << (*i)->getPos() << "\"/>\n"; } out.close(); }