void
SUMOVTypeParameter::write(OutputDevice& dev) const {
    if (onlyReferenced) {
        return;
    }
    dev.openTag(SUMO_TAG_VTYPE);
    dev.writeAttr(SUMO_ATTR_ID, id);
    if (wasSet(VTYPEPARS_LENGTH_SET)) {
        dev.writeAttr(SUMO_ATTR_LENGTH, length);
    }
    if (wasSet(VTYPEPARS_MINGAP_SET)) {
        dev.writeAttr(SUMO_ATTR_MINGAP, minGap);
    }
    if (wasSet(VTYPEPARS_MAXSPEED_SET)) {
        dev.writeAttr(SUMO_ATTR_MAXSPEED, maxSpeed);
    }
    if (wasSet(VTYPEPARS_PROBABILITY_SET)) {
        dev.writeAttr(SUMO_ATTR_PROB, defaultProbability);
    }
    if (wasSet(VTYPEPARS_SPEEDFACTOR_SET)) {
        dev.writeAttr(SUMO_ATTR_SPEEDFACTOR, speedFactor);
    }
    if (wasSet(VTYPEPARS_SPEEDDEVIATION_SET)) {
        dev.writeAttr(SUMO_ATTR_SPEEDDEV, speedDev);
    }
    if (wasSet(VTYPEPARS_VEHICLECLASS_SET)) {
        dev.writeAttr(SUMO_ATTR_VCLASS, toString(vehicleClass));
    }
    if (wasSet(VTYPEPARS_EMISSIONCLASS_SET)) {
        dev.writeAttr(SUMO_ATTR_EMISSIONCLASS, getVehicleEmissionTypeName(emissionClass));
    }
    if (wasSet(VTYPEPARS_SHAPE_SET)) {
        dev.writeAttr(SUMO_ATTR_GUISHAPE, getVehicleShapeName(shape));
    }
    if (wasSet(VTYPEPARS_WIDTH_SET)) {
        dev.writeAttr(SUMO_ATTR_WIDTH, width);
    }
    if (wasSet(VTYPEPARS_HEIGHT_SET)) {
        dev.writeAttr(SUMO_ATTR_HEIGHT, height);
    }
    if (wasSet(VTYPEPARS_COLOR_SET)) {
        dev.writeAttr(SUMO_ATTR_COLOR, color);
    }
    if (wasSet(VTYPEPARS_OSGFILE_SET)) {
        dev.writeAttr(SUMO_ATTR_OSGFILE, osgFile);
    }
    if (wasSet(VTYPEPARS_IMGFILE_SET)) {
        dev.writeAttr(SUMO_ATTR_IMGFILE, imgFile);
    }

    if (cfParameter.size() != 0) {
        dev.openTag(cfModel);
        std::vector<SumoXMLAttr> attrs;
        for (CFParams::const_iterator i = cfParameter.begin(); i != cfParameter.end(); ++i) {
            attrs.push_back(i->first);
        }
        std::sort(attrs.begin(), attrs.end());
        for (std::vector<SumoXMLAttr>::const_iterator i = attrs.begin(); i != attrs.end(); ++i) {
            dev.writeAttr(*i, cfParameter.find(*i)->second);
        }
        dev.closeTag();
        dev.closeTag();
    } else {
        dev.closeTag();
    }
}
void SUMOVehicleParameter::writeAs
 (const std::string& xmlElem, OutputDevice& dev, const OptionsCont& oc)const
{
  dev.openTag(xmlElem) << " id=\"" << id << "\"";
  if (wasSet(VEHPARS_VTYPE_SET))
  {
    dev << " type=\"" << vtypeid << "\"";
  }
  dev << " depart=\"" << time2string(depart) << "\"";

  // optional parameter
  //  departlane
  if (wasSet(VEHPARS_DEPARTLANE_SET) && !defaultOptionOverrides(oc, "departlane")) {
      std::string val;
      switch (departLaneProcedure) {
          case DEPART_LANE_GIVEN:
              val = toString(departLane);
              break;
          case DEPART_LANE_RANDOM:
              val = "random";
              break;
          case DEPART_LANE_FREE:
              val = "free";
              break;
          case DEPART_LANE_ALLOWED_FREE:
              val = "allowed";
              break;
          case DEPART_LANE_BEST_FREE:
              val = "best";
              break;
          case DEPART_LANE_DEFAULT:
          default:
              break;
      }
      dev << " departLane=\"" << val << "\"";
  } else if (oc.isSet("departlane")) {
      dev << " departLane=\"" << oc.getString("departlane") << "\"";
  }
  //  departpos
  if (wasSet(VEHPARS_DEPARTPOS_SET) && !defaultOptionOverrides(oc, "departpos")) {
      std::string val;
      switch (departPosProcedure) {
          case DEPART_POS_GIVEN:
              val = toString(departPos);
              break;
          case DEPART_POS_RANDOM:
              val = "random";
              break;
          case DEPART_POS_RANDOM_FREE:
              val = "random_free";
              break;
          case DEPART_POS_FREE:
              val = "free";
              break;
          case DEPART_POS_PWAG_SIMPLE:
              val = "pwagSimple";
              break;
          case DEPART_POS_PWAG_GENERIC:
              val = "pwagGeneric";
              break;
          case DEPART_POS_MAX_SPEED_GAP:
              val = "maxSpeedGap";
              break;
          case DEPART_POS_BASE:
              val = "base";
              break;
          case DEPART_POS_DEFAULT:
          default:
              break;
      }
      dev << " departPos=\"" << val << "\"";
  } else if (oc.isSet("departpos")) {
      dev << " departPos=\"" << oc.getString("departpos") << "\"";
  }
  //  departspeed
  if (wasSet(VEHPARS_DEPARTSPEED_SET) && !defaultOptionOverrides(oc, "departspeed")) {
      std::string val;
      switch (departSpeedProcedure) {
          case DEPART_SPEED_GIVEN:
              val = toString(departSpeed);
              break;
          case DEPART_SPEED_RANDOM:
              val = "random";
              break;
          case DEPART_SPEED_MAX:
              val = "max";
              break;
          case DEPART_SPEED_DEFAULT:
          default:
              break;
      }
      dev << " departSpeed=\"" << val << "\"";
  } else if (oc.isSet("departspeed")) {
      dev << " departSpeed=\"" << oc.getString("departspeed") << "\"";
  }

  //  arrivallane
  if (wasSet(VEHPARS_ARRIVALLANE_SET) && !defaultOptionOverrides(oc, "arrivallane")) {
      std::string val;
      switch (arrivalLaneProcedure) {
          case ARRIVAL_LANE_GIVEN:
              val = toString(arrivalLane);
              break;
          case ARRIVAL_LANE_CURRENT:
              val = "current";
              break;
          case ARRIVAL_LANE_DEFAULT:
          default:
              break;
      }
      dev << " arrivalLane=\"" << val << "\"";
  } else if (oc.isSet("arrivallane")) {
      dev << " arrivalLane=\"" << oc.getString("arrivallane") << "\"";
  }
  //  arrivalpos
  if (wasSet(VEHPARS_ARRIVALPOS_SET) && !defaultOptionOverrides(oc, "arrivalpos")) {
      std::string val;
      switch (arrivalPosProcedure) {
          case ARRIVAL_POS_GIVEN:
              val = toString(arrivalPos);
              break;
          case ARRIVAL_POS_RANDOM:
              val = "random";
              break;
          case ARRIVAL_POS_MAX:
              val = "max";
              break;
          case ARRIVAL_POS_DEFAULT:
          default:
              break;
      }
      dev << " arrivalPos=\"" << val << "\"";
  } else if (oc.isSet("arrivalpos")) {
      dev << " arrivalPos=\"" << oc.getString("arrivalpos") << "\"";
  }
  //  arrivalspeed
  if (wasSet(VEHPARS_ARRIVALSPEED_SET) && !defaultOptionOverrides(oc, "arrivalspeed")) {
      std::string val;
      switch (arrivalSpeedProcedure) {
          case ARRIVAL_SPEED_GIVEN:
              val = toString(arrivalSpeed);
              break;
          case ARRIVAL_SPEED_CURRENT:
              val = "current";
              break;
          case ARRIVAL_SPEED_DEFAULT:
          default:
              break;
      }
      dev << " arrivalSpeed=\"" << val << "\"";
  } else if (oc.isSet("arrivalspeed")) {
      dev << " arrivalSpeed=\"" << oc.getString("arrivalspeed") << "\"";
  }

  // color
  if (wasSet(VEHPARS_COLOR_SET)) {
      dev << " color=\"" << color << "\"";
  }
  // repetition values
  if (wasSet(VEHPARS_PERIODNUM_SET)) {
      dev << " repno=\"" << repetitionNumber << "\"";
  }
  if (wasSet(VEHPARS_PERIODFREQ_SET)) {
#ifdef HAVE_SUBSECOND_TIMESTEPS
      dev << " period=\"" << time2string(repetitionOffset) << "\"";
#else
      dev << " period=\"" << repetitionOffset << "\"";
#endif
  }
  if (wasSet(VEHPARS_LINE_SET)) {
      dev << " line=\"" << line << "\"";
  }
  if (wasSet(VEHPARS_TAZ_SET)) {
      dev << " fromTaz=\"" << fromTaz << "\" toTaz=\"" << toTaz << "\"";
  }
  dev << ">\n";
}
Exemple #3
0
void
SUMOVehicleParameter::write(OutputDevice& dev, const OptionsCont& oc) const {
    dev.openTag(SUMO_TAG_VEHICLE).writeAttr(SUMO_ATTR_ID, id);
    if (wasSet(VEHPARS_VTYPE_SET)) {
        dev.writeAttr(SUMO_ATTR_TYPE, vtypeid);
    }
    if (departProcedure == DEPART_TRIGGERED) {
        dev.writeAttr(SUMO_ATTR_DEPART, "triggered");
    } else {
        dev.writeAttr(SUMO_ATTR_DEPART, time2string(depart));
    }

    // optional parameter
    //  departlane
    if (wasSet(VEHPARS_DEPARTLANE_SET) && !defaultOptionOverrides(oc, "departlane")) {
        std::string val;
        switch (departLaneProcedure) {
            case DEPART_LANE_GIVEN:
                val = toString(departLane);
                break;
            case DEPART_LANE_RANDOM:
                val = "random";
                break;
            case DEPART_LANE_FREE:
                val = "free";
                break;
            case DEPART_LANE_ALLOWED_FREE:
                val = "allowed";
                break;
            case DEPART_LANE_BEST_FREE:
                val = "best";
                break;
            case DEPART_LANE_DEFAULT:
            default:
                break;
        }
        dev.writeNonEmptyAttr(SUMO_ATTR_DEPARTLANE, val);
    } else if (oc.isSet("departlane")) {
        dev.writeNonEmptyAttr(SUMO_ATTR_DEPARTLANE, oc.getString("departlane"));
    }
    //  departpos
    if (wasSet(VEHPARS_DEPARTPOS_SET) && !defaultOptionOverrides(oc, "departpos")) {
        std::string val;
        switch (departPosProcedure) {
            case DEPART_POS_GIVEN:
                val = toString(departPos);
                break;
            case DEPART_POS_RANDOM:
                val = "random";
                break;
            case DEPART_POS_RANDOM_FREE:
                val = "random_free";
                break;
            case DEPART_POS_FREE:
                val = "free";
                break;
            case DEPART_POS_PWAG_SIMPLE:
                val = "pwagSimple";
                break;
            case DEPART_POS_PWAG_GENERIC:
                val = "pwagGeneric";
                break;
            case DEPART_POS_MAX_SPEED_GAP:
                val = "maxSpeedGap";
                break;
            case DEPART_POS_BASE:
                val = "base";
                break;
            case DEPART_POS_DEFAULT:
            default:
                break;
        }
        dev.writeNonEmptyAttr(SUMO_ATTR_DEPARTPOS, val);
    } else if (oc.isSet("departpos")) {
        dev.writeNonEmptyAttr(SUMO_ATTR_DEPARTPOS, oc.getString("departpos"));
    }
    //  departspeed
    if (wasSet(VEHPARS_DEPARTSPEED_SET) && !defaultOptionOverrides(oc, "departspeed")) {
        std::string val;
        switch (departSpeedProcedure) {
            case DEPART_SPEED_GIVEN:
                val = toString(departSpeed);
                break;
            case DEPART_SPEED_RANDOM:
                val = "random";
                break;
            case DEPART_SPEED_MAX:
                val = "max";
                break;
            case DEPART_SPEED_DEFAULT:
            default:
                break;
        }
        dev.writeNonEmptyAttr(SUMO_ATTR_DEPARTSPEED, val);
    } else if (oc.isSet("departspeed")) {
        dev.writeNonEmptyAttr(SUMO_ATTR_DEPARTSPEED, oc.getString("departspeed"));
    }

    //  arrivallane
    if (wasSet(VEHPARS_ARRIVALLANE_SET) && !defaultOptionOverrides(oc, "arrivallane")) {
        std::string val;
        switch (arrivalLaneProcedure) {
            case ARRIVAL_LANE_GIVEN:
                val = toString(arrivalLane);
                break;
            case ARRIVAL_LANE_CURRENT:
                val = "current";
                break;
            case ARRIVAL_LANE_DEFAULT:
            default:
                break;
        }
        dev.writeNonEmptyAttr(SUMO_ATTR_ARRIVALLANE, val);
    } else if (oc.isSet("arrivallane")) {
        dev.writeNonEmptyAttr(SUMO_ATTR_ARRIVALLANE, oc.getString("arrivallane"));
    }
    //  arrivalpos
    if (wasSet(VEHPARS_ARRIVALPOS_SET) && !defaultOptionOverrides(oc, "arrivalpos")) {
        std::string val;
        switch (arrivalPosProcedure) {
            case ARRIVAL_POS_GIVEN:
                val = toString(arrivalPos);
                break;
            case ARRIVAL_POS_RANDOM:
                val = "random";
                break;
            case ARRIVAL_POS_MAX:
                val = "max";
                break;
            case ARRIVAL_POS_DEFAULT:
            default:
                break;
        }
        dev.writeNonEmptyAttr(SUMO_ATTR_ARRIVALPOS, val);
    } else if (oc.isSet("arrivalpos")) {
        dev.writeNonEmptyAttr(SUMO_ATTR_ARRIVALPOS, oc.getString("arrivalpos"));
    }
    //  arrivalspeed
    if (wasSet(VEHPARS_ARRIVALSPEED_SET) && !defaultOptionOverrides(oc, "arrivalspeed")) {
        std::string val;
        switch (arrivalSpeedProcedure) {
            case ARRIVAL_SPEED_GIVEN:
                val = toString(arrivalSpeed);
                break;
            case ARRIVAL_SPEED_CURRENT:
                val = "current";
                break;
            case ARRIVAL_SPEED_DEFAULT:
            default:
                break;
        }
        dev.writeNonEmptyAttr(SUMO_ATTR_ARRIVALSPEED, val);
    } else if (oc.isSet("arrivalspeed")) {
        dev.writeNonEmptyAttr(SUMO_ATTR_ARRIVALSPEED, oc.getString("arrivalspeed"));
    }

    // color
    if (wasSet(VEHPARS_COLOR_SET)) {
        dev.writeAttr(SUMO_ATTR_COLOR, color);
    }
    if (wasSet(VEHPARS_LINE_SET)) {
        dev.writeAttr(SUMO_ATTR_LINE, line);
    }
    if (wasSet(VEHPARS_TAZ_SET)) {
        dev.writeAttr(SUMO_ATTR_FROM_TAZ, fromTaz).writeAttr(SUMO_ATTR_TO_TAZ, toTaz);
    }
    if (wasSet(VEHPARS_PERSON_CAPACITY_SET)) {
        dev.writeAttr(SUMO_ATTR_PERSON_CAPACITY, personCapacity);
    }
    if (wasSet(VEHPARS_PERSON_NUMBER_SET)) {
        dev.writeAttr(SUMO_ATTR_PERSON_NUMBER, personNumber);
    }
}
void
SUMOVTypeParameter::write(OutputDevice& dev) const {
    if (onlyReferenced) {
        return;
    }
    dev.openTag(SUMO_TAG_VTYPE);
    dev.writeAttr(SUMO_ATTR_ID, id);
    if (wasSet(VTYPEPARS_LENGTH_SET)) {
        dev.writeAttr(SUMO_ATTR_LENGTH, length);
    }
    if (wasSet(VTYPEPARS_MINGAP_SET)) {
        dev.writeAttr(SUMO_ATTR_MINGAP, minGap);
    }
    if (wasSet(VTYPEPARS_MAXSPEED_SET)) {
        dev.writeAttr(SUMO_ATTR_MAXSPEED, maxSpeed);
    }
    if (wasSet(VTYPEPARS_PROBABILITY_SET)) {
        dev.writeAttr(SUMO_ATTR_PROB, defaultProbability);
    }
    if (wasSet(VTYPEPARS_SPEEDFACTOR_SET)) {
        dev.writeAttr(SUMO_ATTR_SPEEDFACTOR, speedFactor);
    }
    if (wasSet(VTYPEPARS_SPEEDDEVIATION_SET)) {
        dev.writeAttr(SUMO_ATTR_SPEEDDEV, speedDev);
    }
    if (wasSet(VTYPEPARS_VEHICLECLASS_SET)) {
        dev.writeAttr(SUMO_ATTR_VCLASS, toString(vehicleClass));
    }
    if (wasSet(VTYPEPARS_EMISSIONCLASS_SET)) {
        dev.writeAttr(SUMO_ATTR_EMISSIONCLASS, PollutantsInterface::getName(emissionClass));
    }
    if (wasSet(VTYPEPARS_IMPATIENCE_SET)) {
        if (impatience == -std::numeric_limits<SUMOReal>::max()) {
            dev.writeAttr(SUMO_ATTR_IMPATIENCE, "off");
        } else {
            dev.writeAttr(SUMO_ATTR_IMPATIENCE, impatience);
        }
    }
    if (wasSet(VTYPEPARS_SHAPE_SET)) {
        dev.writeAttr(SUMO_ATTR_GUISHAPE, getVehicleShapeName(shape));
    }
    if (wasSet(VTYPEPARS_WIDTH_SET)) {
        dev.writeAttr(SUMO_ATTR_WIDTH, width);
    }
    if (wasSet(VTYPEPARS_HEIGHT_SET)) {
        dev.writeAttr(SUMO_ATTR_HEIGHT, height);
    }
    if (wasSet(VTYPEPARS_COLOR_SET)) {
        dev.writeAttr(SUMO_ATTR_COLOR, color);
    }
    if (wasSet(VTYPEPARS_OSGFILE_SET)) {
        dev.writeAttr(SUMO_ATTR_OSGFILE, osgFile);
    }
    if (wasSet(VTYPEPARS_IMGFILE_SET)) {
        dev.writeAttr(SUMO_ATTR_IMGFILE, imgFile);
    }
    if (wasSet(VTYPEPARS_LANE_CHANGE_MODEL_SET)) {
        dev.writeAttr(SUMO_ATTR_LANE_CHANGE_MODEL, lcModel);
    }
    if (wasSet(VTYPEPARS_PERSON_CAPACITY)) {
        dev.writeAttr(SUMO_ATTR_PERSON_CAPACITY, personCapacity);
    }
    if (wasSet(VTYPEPARS_CONTAINER_CAPACITY)) {
        dev.writeAttr(SUMO_ATTR_CONTAINER_CAPACITY, containerCapacity);
    }
    if (wasSet(VTYPEPARS_BOARDING_DURATION)) {
        dev.writeAttr(SUMO_ATTR_BOARDING_DURATION, boardingDuration);
    }
    if (wasSet(VTYPEPARS_LOADING_DURATION)) {
        dev.writeAttr(SUMO_ATTR_LOADING_DURATION, loadingDuration);
    }

    if (cfParameter.size() != 0) {
        dev.openTag(cfModel);
        std::vector<SumoXMLAttr> attrs;
        for (CFParams::const_iterator i = cfParameter.begin(); i != cfParameter.end(); ++i) {
            attrs.push_back(i->first);
        }
        std::sort(attrs.begin(), attrs.end());
        for (std::vector<SumoXMLAttr>::const_iterator i = attrs.begin(); i != attrs.end(); ++i) {
            dev.writeAttr(*i, cfParameter.find(*i)->second);
        }
        dev.closeTag();
    }
    for (std::map<std::string, std::string>::const_iterator j = getMap().begin(); j != getMap().end(); ++j) {
        dev.openTag(SUMO_TAG_PARAM);
        dev.writeAttr(SUMO_ATTR_KEY, (*j).first);
        dev.writeAttr(SUMO_ATTR_VALUE, (*j).second);
        dev.closeTag();
    }
    dev.closeTag();
}
void
SUMOVTypeParameter::write(OutputDevice &dev) const throw(IOError) {
    if (onlyReferenced) {
        return;
    }
    dev << "   <vtype id=\"" << id << '"';
    if (wasSet(VTYPEPARS_LENGTH_SET)) {
        dev << " length=\"" << length << '"';
    }
    if (wasSet(VTYPEPARS_MAXSPEED_SET)) {
        dev << " maxspeed=\"" << maxSpeed << '"';
    }
    if (wasSet(VTYPEPARS_PROBABILITY_SET)) {
        dev << " probability=\"" << defaultProbability << '"';
    }
    if (wasSet(VTYPEPARS_SPEEDFACTOR_SET)) {
        dev << " speedFactor=\"" << speedFactor << '"';
    }
    if (wasSet(VTYPEPARS_SPEEDDEVIATION_SET)) {
        dev << " speedDev=\"" << speedDev << '"';
    }
    if (wasSet(VTYPEPARS_VEHICLECLASS_SET)) {
        dev << " vclass=\"" << getVehicleClassName(vehicleClass) << '"';
    }
    if (wasSet(VTYPEPARS_EMISSIONCLASS_SET)) {
        dev << " emissionClass=\"" << getVehicleEmissionTypeName(emissionClass) << '"';
    }
    if (wasSet(VTYPEPARS_SHAPE_SET)) {
        dev << " guiShape=\"" << getVehicleShapeName(shape) << '"';
    }
    if (wasSet(VTYPEPARS_OFFSET_SET)) {
        dev << " guiOffset=\"" << offset << '"';
    }
    if (wasSet(VTYPEPARS_WIDTH_SET)) {
        dev << " guiWidth=\"" << width << '"';
    }
    if (wasSet(VTYPEPARS_COLOR_SET)) {
        dev << " color=\"" << color << '"';
    }

    if (cfParameter.size()!=0) {
        dev << ">\n";
        dev << "      <";
        switch (cfModel) {
        case SUMO_TAG_CF_IDM:
            dev << CF_MODEL_IDM;
            break;
        case SUMO_TAG_CF_KRAUSS_ORIG1:
            dev << CF_MODEL_KRAUSS_ORIG1;
            break;
        case SUMO_TAG_CF_PWAGNER2009:
            dev << CF_MODEL_PWAGNER2009;
            break;
        case SUMO_TAG_CF_BKERNER:
            dev << CF_MODEL_BKERNER;
            break;
        case SUMO_TAG_CF_IITBNN:
            dev << CF_MODEL_IITBNN;
            break;
        case SUMO_TAG_CF_KRAUSS:
        default:
            dev << CF_MODEL_KRAUSS;
            break;
        }
        std::vector<std::string> names;
        for (std::map<std::string, SUMOReal>::const_iterator i=cfParameter.begin(); i!=cfParameter.end(); ++i) {
            names.push_back((*i).first);
        }
        std::sort(names.begin(), names.end());
        for (std::vector<std::string>::const_iterator i=names.begin(); i!=names.end(); ++i) {
            dev << ' ' << (*i) << "=\"" << cfParameter.find(*i)->second << '"';
        }
        dev << "/>\n";
        dev << "   </vtype>\n";
    } else {
        dev << "/>\n";
    }
}