本文整理汇总了C++中SUMOSAXAttributes::getSUMOTimeReporting方法的典型用法代码示例。如果您正苦于以下问题:C++ SUMOSAXAttributes::getSUMOTimeReporting方法的具体用法?C++ SUMOSAXAttributes::getSUMOTimeReporting怎么用?C++ SUMOSAXAttributes::getSUMOTimeReporting使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类SUMOSAXAttributes
的用法示例。
在下文中一共展示了SUMOSAXAttributes::getSUMOTimeReporting方法的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: edge
void
NLTriggerBuilder::buildVaporizer(const SUMOSAXAttributes& attrs) {
bool ok = true;
// get the id, throw if not given or empty...
std::string id = attrs.get<std::string>(SUMO_ATTR_ID, 0, ok);
if (!ok) {
return;
}
MSEdge* e = MSEdge::dictionary(id);
if (e == 0) {
WRITE_ERROR("Unknown edge ('" + id + "') referenced in a vaporizer.");
return;
}
SUMOTime begin = attrs.getSUMOTimeReporting(SUMO_ATTR_BEGIN, 0, ok);
SUMOTime end = attrs.getSUMOTimeReporting(SUMO_ATTR_END, 0, ok);
if (!ok) {
return;
}
if (begin < 0) {
WRITE_ERROR("A vaporization begin time is negative (edge id='" + id + "').");
return;
}
if (begin >= end) {
WRITE_ERROR("A vaporization ends before it starts (edge id='" + id + "').");
return;
}
if (end >= string2time(OptionsCont::getOptions().getString("begin"))) {
Command* cb = new WrappingCommand< MSEdge >(e, &MSEdge::incVaporization);
MSNet::getInstance()->getBeginOfTimestepEvents().addEvent(cb, begin, MSEventControl::ADAPT_AFTER_EXECUTION);
Command* ce = new WrappingCommand< MSEdge >(e, &MSEdge::decVaporization);
MSNet::getInstance()->getBeginOfTimestepEvents().addEvent(ce, end, MSEventControl::ADAPT_AFTER_EXECUTION);
}
}
示例2: switch
void
SUMORouteHandler::myStartElement(int element,
const SUMOSAXAttributes& attrs) {
switch (element) {
case SUMO_TAG_VEHICLE:
delete myVehicleParameter;
myVehicleParameter = SUMOVehicleParserHelper::parseVehicleAttributes(attrs);
break;
case SUMO_TAG_PERSON:
delete myVehicleParameter;
myVehicleParameter = SUMOVehicleParserHelper::parseVehicleAttributes(attrs, false, false, true);
break;
case SUMO_TAG_CONTAINER:
delete myVehicleParameter;
myVehicleParameter = SUMOVehicleParserHelper::parseVehicleAttributes(attrs);
break;
case SUMO_TAG_FLOW:
delete myVehicleParameter;
myVehicleParameter = SUMOVehicleParserHelper::parseFlowAttributes(attrs, myBeginDefault, myEndDefault);
break;
case SUMO_TAG_VTYPE:
myCurrentVType = SUMOVehicleParserHelper::beginVTypeParsing(attrs, getFileName());
break;
case SUMO_TAG_VTYPE_DISTRIBUTION:
openVehicleTypeDistribution(attrs);
break;
case SUMO_TAG_ROUTE:
openRoute(attrs);
break;
case SUMO_TAG_ROUTE_DISTRIBUTION:
openRouteDistribution(attrs);
break;
case SUMO_TAG_STOP:
addStop(attrs);
break;
case SUMO_TAG_TRIP: {
myVehicleParameter = SUMOVehicleParserHelper::parseVehicleAttributes(attrs, true);
if (myVehicleParameter->id == "") {
//@todo warn about deprecation of missing trip ids
myVehicleParameter->id = myIdSupplier.getNext();
}
myVehicleParameter->setParameter |= VEHPARS_FORCE_REROUTE;
myActiveRouteID = "!" + myVehicleParameter->id;
break;
}
case SUMO_TAG_INTERVAL: {
bool ok;
myBeginDefault = attrs.getSUMOTimeReporting(SUMO_ATTR_BEGIN, 0, ok);
myEndDefault = attrs.getSUMOTimeReporting(SUMO_ATTR_END, 0, ok);
break;
}
case SUMO_TAG_PARAM:
addParam(attrs);
break;
default:
break;
}
}
示例3: getFileName
void
NLHandler::addE1Detector(const SUMOSAXAttributes& attrs) {
bool ok = true;
// get the id, report an error if not given or empty...
std::string id = attrs.get<std::string>(SUMO_ATTR_ID, 0, ok);
if (!ok) {
return;
}
const SUMOTime frequency = attrs.getSUMOTimeReporting(SUMO_ATTR_FREQUENCY, id.c_str(), ok);
const SUMOReal position = attrs.get<SUMOReal>(SUMO_ATTR_POSITION, id.c_str(), ok);
const bool friendlyPos = attrs.getOpt<bool>(SUMO_ATTR_FRIENDLY_POS, id.c_str(), ok, false);
const bool splitByType = attrs.getOpt<bool>(SUMO_ATTR_SPLIT_VTYPE, id.c_str(), ok, false);
const std::string lane = attrs.get<std::string>(SUMO_ATTR_LANE, id.c_str(), ok);
const std::string file = attrs.get<std::string>(SUMO_ATTR_FILE, id.c_str(), ok);
if (!ok) {
return;
}
try {
myDetectorBuilder.buildInductLoop(id, lane, position, frequency,
FileHelpers::checkForRelativity(file, getFileName()),
friendlyPos, splitByType);
} catch (InvalidArgument& e) {
WRITE_ERROR(e.what());
} catch (IOError& e) {
WRITE_ERROR(e.what());
}
}
示例4: getID
void
MSLaneSpeedTrigger::myStartElement(int element,
const SUMOSAXAttributes& attrs) {
// check whether the correct tag is read
if (element != SUMO_TAG_STEP) {
return;
}
// extract the values
bool ok = true;
SUMOTime next = attrs.getSUMOTimeReporting(SUMO_ATTR_TIME, getID().c_str(), ok);
SUMOReal speed = attrs.getOpt<SUMOReal>(SUMO_ATTR_SPEED, getID().c_str(), ok, -1);
// check the values
if (next < 0) {
WRITE_ERROR("Wrong time in vss '" + getID() + "'.");
return;
}
if (speed < 0) {
speed = myDefaultSpeed;
}
// set the values for the next step if they are valid
if (myLoadedSpeeds.size() != 0 && myLoadedSpeeds.back().first == next) {
WRITE_WARNING("Time " + time2string(next) + " was set twice for vss '" + getID() + "'; replacing first entry.");
myLoadedSpeeds.back().second = speed;
} else {
myLoadedSpeeds.push_back(std::make_pair(next, speed));
}
}
示例5: st
void
ROJTRTurnDefLoader::myStartElement(int element,
const SUMOSAXAttributes& attrs) {
bool ok = true;
switch (element) {
case SUMO_TAG_INTERVAL:
myIntervalBegin = attrs.getSUMOTimeReporting(SUMO_ATTR_BEGIN, 0, ok);
myIntervalEnd = attrs.getSUMOTimeReporting(SUMO_ATTR_END, 0, ok);
break;
case SUMO_TAG_FROMEDGE:
beginFromEdge(attrs);
break;
case SUMO_TAG_TOEDGE:
addToEdge(attrs);
break;
case SUMO_TAG_SINK:
if (attrs.hasAttribute(SUMO_ATTR_EDGES)) {
std::string edges = attrs.get<std::string>(SUMO_ATTR_EDGES, 0, ok);
StringTokenizer st(edges, StringTokenizer::WHITECHARS);
while (st.hasNext()) {
std::string id = st.next();
ROEdge* edge = myNet.getEdge(id);
if (edge == 0) {
throw ProcessError("The edge '" + id + "' declared as a sink is not known.");
}
edge->setType(ROEdge::ET_SINK);
}
}
break;
case SUMO_TAG_SOURCE:
if (attrs.hasAttribute(SUMO_ATTR_EDGES)) {
std::string edges = attrs.get<std::string>(SUMO_ATTR_EDGES, 0, ok);
StringTokenizer st(edges, StringTokenizer::WHITECHARS);
while (st.hasNext()) {
std::string id = st.next();
ROEdge* edge = myNet.getEdge(id);
if (edge == 0) {
throw ProcessError("The edge '" + id + "' declared as a source is not known.");
}
edge->setType(ROEdge::ET_SOURCE);
}
}
break;
default:
break;
}
}
示例6: switch
void
TrajectoriesHandler::myStartElement(int element,
const SUMOSAXAttributes& attrs) {
bool ok = true;
switch (element) {
case SUMO_TAG_TRAJECTORIES:
myStepSize = attrs.getFloat("timeStepSize") / 1000.;
break;
case SUMO_TAG_TIMESTEP:
myCurrentTime = attrs.getSUMOTimeReporting(SUMO_ATTR_TIME, 0, ok);
break;
case SUMO_TAG_VEHICLE:
if (attrs.hasAttribute(SUMO_ATTR_SPEED)) {
SUMOReal v = attrs.getFloat(SUMO_ATTR_SPEED);
SUMOReal a = INVALID_VALUE;
SUMOReal s = INVALID_VALUE;
writeEmissions(std::cout, attrs.getString(SUMO_ATTR_ID), myDefaultClass, STEPS2TIME(myCurrentTime), v, a, s);
} else {
const std::string acId = attrs.getString(SUMO_ATTR_ACTORCONFIG);
const std::string id = attrs.getString(SUMO_ATTR_ID);
if (myEmissionClassByType.count(acId) == 0) {
WRITE_WARNING("Unknown actor configuration '" + acId + "' for vehicle '" + id + "'!");
} else {
myEmissionClassByVehicle[id] = myEmissionClassByType.count(acId) > 0 ? myEmissionClassByType[acId] : myDefaultClass;
}
}
break;
case SUMO_TAG_ACTORCONFIG: {
const std::string id = attrs.getString(SUMO_ATTR_ID);
const std::string vClass = attrs.getString(SUMO_ATTR_VEHICLECLASS);
const std::string fuel = attrs.getString(SUMO_ATTR_FUEL);
const std::string eClass = attrs.getString(SUMO_ATTR_EMISSIONCLASS);
const SUMOReal weight = attrs.getOpt<SUMOReal>(SUMO_ATTR_WEIGHT, id.c_str(), ok, 0.) * 10.;
myEmissionClassByType[id] = PollutantsInterface::getClass(myDefaultClass, vClass, fuel, eClass, weight);
break;
}
case SUMO_TAG_MOTIONSTATE: {
const std::string id = attrs.getString(SUMO_ATTR_VEHICLE);
if (myEmissionClassByVehicle.count(id) == 0) {
WRITE_WARNING("Motion state for unknown vehicle '" + id + "'!");
myEmissionClassByVehicle[id] = myDefaultClass;
}
const SUMOEmissionClass c = myEmissionClassByVehicle[id];
SUMOReal v = attrs.getFloat(SUMO_ATTR_SPEED) / 100.;
SUMOReal a = attrs.hasAttribute(SUMO_ATTR_ACCELERATION) ? attrs.get<SUMOReal>(SUMO_ATTR_ACCELERATION, id.c_str(), ok) / 1000. : INVALID_VALUE;
SUMOReal s = attrs.hasAttribute(SUMO_ATTR_SLOPE) ? RAD2DEG(asin(attrs.get<SUMOReal>(SUMO_ATTR_SLOPE, id.c_str(), ok) / 10000.)) : INVALID_VALUE;
const SUMOTime time = attrs.getOpt<int>(SUMO_ATTR_TIME, id.c_str(), ok, INVALID_VALUE);
if (myXMLOut != 0) {
writeXMLEmissions(id, c, time, v, a, s);
}
if (myStdOut != 0) {
writeEmissions(*myStdOut, id, c, STEPS2TIME(time), v, a, s);
}
break;
}
default:
break;
}
}
示例7: catch
void
NLHandler::addWAUTSwitch(const SUMOSAXAttributes& attrs) {
bool ok = true;
SUMOTime t = attrs.getSUMOTimeReporting(SUMO_ATTR_TIME, myCurrentWAUTID.c_str(), ok);
std::string to = attrs.get<std::string>(SUMO_ATTR_TO, myCurrentWAUTID.c_str(), ok);
if (!ok) {
myCurrentIsBroken = true;
}
if (!myCurrentIsBroken) {
try {
myJunctionControlBuilder.getTLLogicControlToUse().addWAUTSwitch(myCurrentWAUTID, t, to);
} catch (InvalidArgument& e) {
WRITE_ERROR(e.what());
myCurrentIsBroken = true;
}
}
}
示例8:
void
NLHandler::addPhase(const SUMOSAXAttributes& attrs) {
// try to get the phase definition
bool ok = true;
std::string state = attrs.get<std::string>(SUMO_ATTR_STATE, 0, ok);
if (!ok) {
return;
}
// try to get the phase duration
SUMOTime duration = attrs.getSUMOTimeReporting(SUMO_ATTR_DURATION, myJunctionControlBuilder.getActiveKey().c_str(), ok);
if (duration == 0) {
WRITE_ERROR("Duration of tls-logic '" + myJunctionControlBuilder.getActiveKey() + "/" + myJunctionControlBuilder.getActiveSubKey() + "' is zero.");
return;
}
// if the traffic light is an actuated traffic light, try to get
// the minimum and maximum durations
SUMOTime minDuration = attrs.getOptSUMOTimeReporting(
SUMO_ATTR_MINDURATION, myJunctionControlBuilder.getActiveKey().c_str(), ok, duration);
SUMOTime maxDuration = attrs.getOptSUMOTimeReporting(
SUMO_ATTR_MAXDURATION, myJunctionControlBuilder.getActiveKey().c_str(), ok, duration);
myJunctionControlBuilder.addPhase(duration, state, minDuration, maxDuration);
}
示例9: throw
void
MSLaneSpeedTrigger::myStartElement(SumoXMLTag element,
const SUMOSAXAttributes &attrs) throw(ProcessError) {
// check whether the correct tag is read
if (element!=SUMO_TAG_STEP) {
return;
}
// extract the values
bool ok = true;
SUMOTime next = attrs.getSUMOTimeReporting(SUMO_ATTR_TIME, "vss/step", getID().c_str(), ok);
SUMOReal speed = attrs.getOptSUMORealReporting(SUMO_ATTR_SPEED, "vss/step", getID().c_str(), ok, -1);
// check the values
if (next<0) {
MsgHandler::getErrorInstance()->inform("Wrong time in MSLaneSpeedTrigger in file '" + getFileName() + "'.");
return;
}
if (speed<0) {
MsgHandler::getErrorInstance()->inform("Wrong speed in MSLaneSpeedTrigger in file '" + getFileName() + "'.");
return;
}
// set the values for the next step as they are valid
myLoadedSpeeds.push_back(std::make_pair(next, speed));
}
示例10: switch
void
SUMORouteHandler::myStartElement(int element,
const SUMOSAXAttributes& attrs) {
switch (element) {
case SUMO_TAG_VEHICLE:
delete myVehicleParameter;
myVehicleParameter = SUMOVehicleParserHelper::parseVehicleAttributes(attrs);
break;
case SUMO_TAG_PERSON:
delete myVehicleParameter;
myVehicleParameter = SUMOVehicleParserHelper::parseVehicleAttributes(attrs, false, false, true);
break;
case SUMO_TAG_CONTAINER:
delete myVehicleParameter;
myVehicleParameter = SUMOVehicleParserHelper::parseVehicleAttributes(attrs);
break;
case SUMO_TAG_FLOW:
delete myVehicleParameter;
myVehicleParameter = SUMOVehicleParserHelper::parseFlowAttributes(attrs, myBeginDefault, myEndDefault);
break;
case SUMO_TAG_VTYPE:
// XXX: Where is this deleted? Delegated to subclasses?! MSRouteHandler takes care of this, in case of RORouteHandler this is not obvious. Consider introduction of a shared_ptr
myCurrentVType = SUMOVehicleParserHelper::beginVTypeParsing(attrs, getFileName());
break;
case SUMO_TAG_VTYPE_DISTRIBUTION:
openVehicleTypeDistribution(attrs);
break;
case SUMO_TAG_ROUTE:
openRoute(attrs);
break;
case SUMO_TAG_ROUTE_DISTRIBUTION:
openRouteDistribution(attrs);
break;
case SUMO_TAG_STOP:
addStop(attrs);
break;
case SUMO_TAG_TRIP: {
myVehicleParameter = SUMOVehicleParserHelper::parseVehicleAttributes(attrs, true);
if (myVehicleParameter->id == "") {
WRITE_WARNING("Omitting trip ids is deprecated!");
myVehicleParameter->id = myIdSupplier.getNext();
}
myVehicleParameter->parametersSet |= VEHPARS_FORCE_REROUTE;
myActiveRouteID = "!" + myVehicleParameter->id;
break;
}
case SUMO_TAG_PERSONTRIP:
case SUMO_TAG_WALK:
if (attrs.hasAttribute(SUMO_ATTR_EDGES) || attrs.hasAttribute(SUMO_ATTR_ROUTE)) {
addWalk(attrs);
} else {
addPersonTrip(attrs);
}
break;
case SUMO_TAG_INTERVAL: {
bool ok;
myBeginDefault = attrs.getSUMOTimeReporting(SUMO_ATTR_BEGIN, 0, ok);
myEndDefault = attrs.getSUMOTimeReporting(SUMO_ATTR_END, 0, ok);
break;
}
case SUMO_TAG_PARAM:
addParam(attrs);
break;
default:
// parse embedded car following model information
if (myCurrentVType != 0) {
WRITE_WARNING("Defining car following parameters in a nested element is deprecated in vType '" + myCurrentVType->id + "', use attributes instead!");
SUMOVehicleParserHelper::parseVTypeEmbedded(*myCurrentVType, (SumoXMLTag)element, attrs);
}
break;
}
}
示例11: ProcessError
void
MSCalibrator::MSCalibrator_FileTriggeredChild::myStartElement(SumoXMLTag element,
const SUMOSAXAttributes &attrs) throw(ProcessError) {
if (element==SUMO_TAG_ROUTEDISTELEM) {
bool ok = true;
SUMOReal freq = attrs.getSUMORealReporting(SUMO_ATTR_PROB, "calibrator/routedistelem", myParent.getID().c_str(), ok);
std::string routeStr = attrs.getStringReporting(SUMO_ATTR_ID, "calibrator/routedistelem", myParent.getID().c_str(), ok);
if (ok) {
const MSRoute* route = MSRoute::dictionary(routeStr);
if (route == 0) {
throw ProcessError("MSTriggeredSource " + myParent.getID() + ": Route '" + routeStr + "' does not exist.");
}
if (freq<0) {
throw ProcessError("MSTriggeredSource " + myParent.getID() + ": Attribute \"probability\" is negative (must not).");
}
// Attributes ok, add to routeDist
myRouteDist.add(freq, route);
}
return;
}
// vehicle-type distributions
if (element==SUMO_TAG_VTYPEDISTELEM) {
// get the id, report an error if not given or empty...
std::string id;
if (!attrs.setIDFromAttributes("vtypedistelem", id)) {
return;
}
bool ok = true;
SUMOReal prob = attrs.getSUMORealReporting(SUMO_ATTR_PROB, "vtypedistelem", id.c_str(), ok);
if (ok) {
if (prob<=0) {
MsgHandler::getErrorInstance()->inform("False probability while parsing calibrator '" + myParent.getID() + "' (" + toString(prob) + ").");
return;
}
MSVehicleType *vtype = MSNet::getInstance()->getVehicleControl().getVType(id);
if (vtype==0) {
MsgHandler::getErrorInstance()->inform("Unknown vtype-object '" + id + "'.");
return;
}
myVTypeDist.add(prob, vtype);
}
}
if (element==SUMO_TAG_FLOW) {
bool ok = true;
SUMOReal no = attrs.getSUMORealReporting(SUMO_ATTR_NO, "flow", myParent.getID().c_str(), ok);
if (no<0) {
MsgHandler::getErrorInstance()->inform("Negative flow in calibrator '" + myParent.getID() + "'.");
return;
}
SUMOTime end = attrs.getOptSUMOTimeReporting(SUMO_ATTR_END, "flow", myParent.getID().c_str(), ok, -1);
if (!ok) {
return;
}
myFlow = (SUMOReal) no;
if (end==-1||end>=MSNet::getInstance()->getCurrentTimeStep()) {
if (myFlow>0) {
buildAndScheduleFlowVehicle();
MSNet::getInstance()->getEmissionEvents().addEvent(
new WrappingCommand<MSCalibrator::MSCalibrator_FileTriggeredChild>(this, &MSCalibrator::MSCalibrator_FileTriggeredChild::execute),
(SUMOTime)(1. / (myFlow / 3600.))+MSNet::getInstance()->getCurrentTimeStep(),
MSEventControl::ADAPT_AFTER_EXECUTION);
myHaveInitialisedFlow = true;
}
}
}
// check whethe the correct tag is read
if (element==SUMO_TAG_EMIT) {
bool ok = true;
SUMOTime depart = attrs.getSUMOTimeReporting(SUMO_ATTR_TIME, "emit", 0, ok);
SUMOReal departSpeed = attrs.getOptSUMORealReporting(SUMO_ATTR_SPEED, "emit", myParent.getID().c_str(), ok, -1);
if (!ok) {
return;
}
if (depart<myBeginTime) {
// do not process the vehicle if the emission time is before the simulation begin
return;
}
SUMOVehicleParameter* pars = new SUMOVehicleParameter();
pars->repetitionNumber = -1;
pars->repetitionOffset = -1;
pars->depart = depart;
pars->departSpeed = departSpeed;
// check and assign id
pars->id = attrs.getStringSecure(SUMO_ATTR_ID, "");
if (myVehicleControl.getVehicle(pars->id)!=0) {
WRITE_WARNING("MSTriggeredSource " + myParent.getID()+ ": Vehicle " + pars->id + " already exists.\n Generating a default id.");
pars->id = "";
}
if (pars->id=="") {
pars->id = myParent.getID() + "_" + toString(pars->depart) + "_" + toString(myRunningID++);
if (myVehicleControl.getVehicle(pars->id)!=0) {
WRITE_WARNING("MSTriggeredSource " + myParent.getID()+ ": Vehicle " + pars->id + " already exists.\n Continuing with next element.");
return;
}
}
// check and assign vehicle type
pars->vtypeid = attrs.getStringReporting(SUMO_ATTR_TYPE, "calibrator/routedistelem", myParent.getID().c_str(), ok, "");
//.........这里部分代码省略.........
示例12: if
void
MSCalibrator::myStartElement(int element,
const SUMOSAXAttributes& attrs) {
if (element == SUMO_TAG_FLOW) {
AspiredState state;
SUMOTime lastEnd = -1;
if (myIntervals.size() > 0) {
lastEnd = myIntervals.back().end;
if (lastEnd == -1) {
lastEnd = myIntervals.back().begin;
}
}
try {
bool ok = true;
state.q = attrs.getOpt<double>(SUMO_ATTR_VEHSPERHOUR, nullptr, ok, -1.);
state.v = attrs.getOpt<double>(SUMO_ATTR_SPEED, nullptr, ok, -1.);
state.begin = attrs.getSUMOTimeReporting(SUMO_ATTR_BEGIN, myID.c_str(), ok);
if (state.begin < lastEnd) {
WRITE_ERROR("Overlapping or unsorted intervals in calibrator '" + myID + "'.");
}
state.end = attrs.getOptSUMOTimeReporting(SUMO_ATTR_END, myID.c_str(), ok, -1);
state.vehicleParameter = SUMOVehicleParserHelper::parseVehicleAttributes(attrs, true, true);
LeftoverVehicleParameters.push_back(state.vehicleParameter);
// vehicles should be inserted with max speed unless stated otherwise
if (state.vehicleParameter->departSpeedProcedure == DEPART_SPEED_DEFAULT) {
state.vehicleParameter->departSpeedProcedure = DEPART_SPEED_MAX;
}
// vehicles should be inserted on any lane unless stated otherwise
if (state.vehicleParameter->departLaneProcedure == DEPART_LANE_DEFAULT) {
if (myLane == nullptr) {
state.vehicleParameter->departLaneProcedure = DEPART_LANE_ALLOWED_FREE;
} else {
state.vehicleParameter->departLaneProcedure = DEPART_LANE_GIVEN;
state.vehicleParameter->departLane = myLane->getIndex();
}
} else if (myLane != nullptr && (
state.vehicleParameter->departLaneProcedure != DEPART_LANE_GIVEN
|| state.vehicleParameter->departLane != myLane->getIndex())) {
WRITE_WARNING("Insertion lane may differ from calibrator lane for calibrator '" + getID() + "'.");
}
if (state.vehicleParameter->vtypeid != DEFAULT_VTYPE_ID &&
MSNet::getInstance()->getVehicleControl().getVType(state.vehicleParameter->vtypeid) == nullptr) {
WRITE_ERROR("Unknown vehicle type '" + state.vehicleParameter->vtypeid + "' in calibrator '" + myID + "'.");
}
} catch (EmptyData&) {
WRITE_ERROR("Mandatory attribute missing in definition of calibrator '" + myID + "'.");
} catch (NumberFormatException&) {
WRITE_ERROR("Non-numeric value for numeric attribute in definition of calibrator '" + myID + "'.");
}
if (state.q < 0 && state.v < 0) {
WRITE_ERROR("Either 'vehsPerHour' or 'speed' has to be given in flow definition of calibrator '" + myID + "'.");
}
if (myIntervals.size() > 0 && myIntervals.back().end == -1) {
myIntervals.back().end = state.begin;
}
myIntervals.push_back(state);
myCurrentStateInterval = myIntervals.begin();
} else {
MSRouteHandler::myStartElement(element, attrs);
}
}
示例13: switch
void
GUISettingsHandler::myStartElement(int element,
const SUMOSAXAttributes& attrs) {
bool ok = true;
switch (element) {
case SUMO_TAG_BREAKPOINTS_FILE: {
std::string file = attrs.get<std::string>(SUMO_ATTR_VALUE, nullptr, ok);
myBreakpoints = loadBreakpoints(file);
}
break;
case SUMO_TAG_BREAKPOINT:
myBreakpoints.push_back(attrs.getSUMOTimeReporting(SUMO_ATTR_VALUE, nullptr, ok));
break;
case SUMO_TAG_VIEWSETTINGS:
myViewType = attrs.getOpt<std::string>(SUMO_ATTR_TYPE, nullptr, ok, "default");
std::transform(myViewType.begin(), myViewType.end(), myViewType.begin(), tolower);
break;
case SUMO_TAG_DELAY:
myDelay = attrs.getOpt<double>(SUMO_ATTR_VALUE, nullptr, ok, myDelay);
break;
case SUMO_TAG_VIEWPORT: {
const double x = attrs.getOpt<double>(SUMO_ATTR_X, nullptr, ok, myLookFrom.x());
const double y = attrs.getOpt<double>(SUMO_ATTR_Y, nullptr, ok, myLookFrom.y());
const double z = attrs.getOpt<double>(SUMO_ATTR_ZOOM, nullptr, ok, myLookFrom.z());
myLookFrom.set(x, y, z);
const double cx = attrs.getOpt<double>(SUMO_ATTR_CENTER_X, nullptr, ok, myLookAt.x());
const double cy = attrs.getOpt<double>(SUMO_ATTR_CENTER_Y, nullptr, ok, myLookAt.y());
const double cz = attrs.getOpt<double>(SUMO_ATTR_CENTER_Z, nullptr, ok, myLookAt.z());
myLookAt.set(cx, cy, cz);
myRotation = attrs.getOpt<double>(SUMO_ATTR_ANGLE, nullptr, ok, myRotation);
break;
}
case SUMO_TAG_SNAPSHOT: {
bool ok = true;
std::string file = attrs.get<std::string>(SUMO_ATTR_FILE, nullptr, ok);
if (file != "" && !FileHelpers::isAbsolute(file)) {
file = FileHelpers::getConfigurationRelative(getFileName(), file);
}
mySnapshots[attrs.getOptSUMOTimeReporting(SUMO_ATTR_TIME, file.c_str(), ok, 0)].push_back(file);
}
break;
case SUMO_TAG_VIEWSETTINGS_SCHEME: {
bool ok = true;
mySettings.name = attrs.getOpt<std::string>(SUMO_ATTR_NAME, nullptr, ok, mySettings.name);
if (gSchemeStorage.contains(mySettings.name)) {
mySettings = gSchemeStorage.get(mySettings.name);
}
}
break;
case SUMO_TAG_VIEWSETTINGS_OPENGL:
mySettings.dither = StringUtils::toBool(attrs.getStringSecure("dither", toString(mySettings.dither)));
mySettings.fps = StringUtils::toBool(attrs.getStringSecure("fps", toString(mySettings.fps)));
mySettings.drawBoundaries = StringUtils::toBool(attrs.getStringSecure("drawBoundaries", toString(mySettings.drawBoundaries)));
mySettings.forceDrawForSelecting = StringUtils::toBool(attrs.getStringSecure("forceDrawForSelecting", toString(mySettings.forceDrawForSelecting)));
break;
case SUMO_TAG_VIEWSETTINGS_BACKGROUND: {
bool ok = true;
mySettings.backgroundColor = RGBColor::parseColorReporting(attrs.getStringSecure("backgroundColor", toString(mySettings.backgroundColor)), "background", nullptr, true, ok);
mySettings.showGrid = StringUtils::toBool(attrs.getStringSecure("showGrid", toString(mySettings.showGrid)));
mySettings.gridXSize = StringUtils::toDouble(attrs.getStringSecure("gridXSize", toString(mySettings.gridXSize)));
mySettings.gridYSize = StringUtils::toDouble(attrs.getStringSecure("gridYSize", toString(mySettings.gridYSize)));
}
break;
case SUMO_TAG_VIEWSETTINGS_EDGES: {
int laneEdgeMode = StringUtils::toInt(attrs.getStringSecure("laneEdgeMode", "0"));
int laneEdgeScaleMode = StringUtils::toInt(attrs.getStringSecure("scaleMode", "0"));
mySettings.laneShowBorders = StringUtils::toBool(attrs.getStringSecure("laneShowBorders", toString(mySettings.laneShowBorders)));
mySettings.showBikeMarkings = StringUtils::toBool(attrs.getStringSecure("showBikeMarkings", toString(mySettings.showBikeMarkings)));
mySettings.showLinkDecals = StringUtils::toBool(attrs.getStringSecure("showLinkDecals", toString(mySettings.showLinkDecals)));
mySettings.showLinkRules = StringUtils::toBool(attrs.getStringSecure("showLinkRules", toString(mySettings.showLinkRules)));
mySettings.showRails = StringUtils::toBool(attrs.getStringSecure("showRails", toString(mySettings.showRails)));
mySettings.edgeName = parseTextSettings("edgeName", attrs, mySettings.edgeName);
mySettings.internalEdgeName = parseTextSettings("internalEdgeName", attrs, mySettings.internalEdgeName);
mySettings.cwaEdgeName = parseTextSettings("cwaEdgeName", attrs, mySettings.cwaEdgeName);
mySettings.streetName = parseTextSettings("streetName", attrs, mySettings.streetName);
mySettings.edgeValue = parseTextSettings("edgeValue", attrs, mySettings.edgeValue);
mySettings.hideConnectors = StringUtils::toBool(attrs.getStringSecure("hideConnectors", toString(mySettings.hideConnectors)));
mySettings.laneWidthExaggeration = StringUtils::toDouble(attrs.getStringSecure("widthExaggeration", toString(mySettings.laneWidthExaggeration)));
mySettings.laneMinSize = StringUtils::toDouble(attrs.getStringSecure("minSize", toString(mySettings.laneWidthExaggeration)));
mySettings.showLaneDirection = StringUtils::toBool(attrs.getStringSecure("showDirection", toString(mySettings.showLaneDirection)));
mySettings.showSublanes = StringUtils::toBool(attrs.getStringSecure("showSublanes", toString(mySettings.showSublanes)));
mySettings.spreadSuperposed = StringUtils::toBool(attrs.getStringSecure("spreadSuperposed", toString(mySettings.spreadSuperposed)));
mySettings.edgeParam = attrs.getStringSecure("edgeParam", mySettings.edgeParam);
mySettings.laneParam = attrs.getStringSecure("laneParam", mySettings.laneParam);
mySettings.edgeData = attrs.getStringSecure("edgeData", mySettings.edgeData);
myCurrentColorer = element;
mySettings.edgeColorer.setActive(laneEdgeMode);
mySettings.edgeScaler.setActive(laneEdgeScaleMode);
mySettings.laneColorer.setActive(laneEdgeMode);
mySettings.laneScaler.setActive(laneEdgeScaleMode);
}
break;
case SUMO_TAG_COLORSCHEME:
myCurrentScheme = nullptr;
myCurrentScaleScheme = nullptr;
if (myCurrentColorer == SUMO_TAG_VIEWSETTINGS_EDGES) {
myCurrentScheme = mySettings.laneColorer.getSchemeByName(attrs.getStringSecure(SUMO_ATTR_NAME, ""));
if (myCurrentScheme == nullptr) {
myCurrentScheme = mySettings.edgeColorer.getSchemeByName(attrs.getStringSecure(SUMO_ATTR_NAME, ""));
}
//.........这里部分代码省略.........