void GNEDemandElement::changeDemandElementID(const std::string& newID) { if (myViewNet->getNet()->retrieveDemandElement(myTagProperty.getTag(), newID, false) != nullptr) { throw InvalidArgument("An DemandElement with tag " + getTagStr() + " and ID = " + newID + " already exists"); } else { // Save old ID std::string oldID = getMicrosimID(); // set New ID setMicrosimID(newID); // update demand element ID in the container of net myViewNet->getNet()->updateDemandElementID(oldID, this); } }
void GNELane::setIndex(unsigned int index) { myIndex = index; setMicrosimID(myParentEdge.getNBEdge()->getLaneID(index)); }
void GNEPOI::setAttribute(SumoXMLAttr key, const std::string& value) { switch (key) { case SUMO_ATTR_ID: { std::string oldID = myID; myID = value; myNet->changeShapeID(this, oldID); setMicrosimID(value); break; } case SUMO_ATTR_COLOR: setShapeColor(parse<RGBColor>(value)); break; case SUMO_ATTR_LANE: myLane = value; changeLaneParents(this, value); break; case SUMO_ATTR_POSITION: { if (getLaneParents().size() > 0) { myPosOverLane = parse<double>(value); } else { // first remove object from grid due position is used for boundary myNet->removeGLObjectFromGrid(this); // set position set(parse<Position>(value)); // set GEO Position myGEOPosition = *this; GeoConvHelper::getFinal().cartesian2geo(myGEOPosition); // add object into grid again myNet->addGLObjectIntoGrid(this); } break; } case SUMO_ATTR_POSITION_LAT: // first remove object from grid due position is used for boundary myNet->removeGLObjectFromGrid(this); myPosLat = parse<double>(value); // add object into grid again myNet->addGLObjectIntoGrid(this); break; case SUMO_ATTR_GEOPOSITION: { // first remove object from grid due position is used for boundary myNet->removeGLObjectFromGrid(this); myGEOPosition = parse<Position>(value); // set cartesian Position set(myGEOPosition); GeoConvHelper::getFinal().x2cartesian_const(*this); // add object into grid again myNet->addGLObjectIntoGrid(this); break; } case SUMO_ATTR_GEO: myGeo = parse<bool>(value); break; case SUMO_ATTR_TYPE: setShapeType(value); break; case SUMO_ATTR_LAYER: if (value == "default") { setShapeLayer(Shape::DEFAULT_LAYER_POI); } else { setShapeLayer(parse<double>(value)); } break; case SUMO_ATTR_IMGFILE: // first remove object from grid due img file affect to boundary myNet->removeGLObjectFromGrid(this); setShapeImgFile(value); // all textures must be refresh GUITexturesHelper::clearTextures(); // add object into grid again myNet->addGLObjectIntoGrid(this); break; case SUMO_ATTR_RELATIVEPATH: setShapeRelativePath(parse<bool>(value)); break; case SUMO_ATTR_WIDTH: // first remove object from grid due position is used for boundary myNet->removeGLObjectFromGrid(this); setWidth(parse<double>(value)); // add object into grid again myNet->addGLObjectIntoGrid(this); break; case SUMO_ATTR_HEIGHT: // first remove object from grid due position is used for boundary myNet->removeGLObjectFromGrid(this); setHeight(parse<double>(value)); // add object into grid again myNet->addGLObjectIntoGrid(this); break; case SUMO_ATTR_ANGLE: setShapeNaviDegree(parse<double>(value)); break; case GNE_ATTR_BLOCK_MOVEMENT: myBlockMovement = parse<bool>(value); break; case GNE_ATTR_SELECTED: if (parse<bool>(value)) { selectAttributeCarrier(); } else { unselectAttributeCarrier(); } break; case GNE_ATTR_GENERIC: setGenericParametersStr(value); break; default: throw InvalidArgument(getTagStr() + " attribute '" + toString(key) + "' not allowed"); } // check if updated attribute requieres update geometry if (myTagProperty.hasAttribute(key) && myTagProperty.getAttributeProperties(key).requiereUpdateGeometry()) { updateGeometry(); } }
void GNEConnection::updateID() { setMicrosimID(myFromLane->getMicrosimID() + " -> " + myToLane->getMicrosimID()); }