本文整理汇总了C++中GNEEdge类的典型用法代码示例。如果您正苦于以下问题:C++ GNEEdge类的具体用法?C++ GNEEdge怎么用?C++ GNEEdge使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了GNEEdge类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
long
GNEConnectorFrame::onCmdSelectConflicts(FXObject*, FXSelector, void*) {
std::vector<GUIGlID> selectIDs;
// conflicts happen per edge so we can look at each edge in isolation
const std::vector<GNEEdge*> edges = myViewNet->getNet()->retrieveEdges();
for (std::vector<GNEEdge*>::const_iterator edge_it = edges.begin(); edge_it != edges.end(); edge_it++) {
NBEdge* nbe = (*edge_it)->getNBEdge();
const EdgeVector destinations = nbe->getConnectedEdges();
const std::vector<NBEdge::Connection>& connections = nbe->getConnections();
for (EdgeVector::const_iterator dest_it = destinations.begin(); dest_it != destinations.end(); dest_it++) {
GNEEdge* dest = myViewNet->getNet()->retrieveEdge((*dest_it)->getID());
const GNEEdge::LaneVector& destLanes = dest->getLanes();
for (GNEEdge::LaneVector::const_iterator it_lane = destLanes.begin(); it_lane != destLanes.end(); it_lane++) {
const bool isConflicted = count_if(
connections.begin(), connections.end(),
NBEdge::connections_toedgelane_finder(*dest_it, (int)(*it_lane)->getIndex(), -1)) > 1;
if (isConflicted) {
selectIDs.push_back((*it_lane)->getGlID());
}
}
}
}
myViewNet->getViewParent()->getSelectorFrame()->handleIDs(selectIDs, false, GNESelectorFrame::SET_REPLACE);
return 1;
}
示例2: retrieveJunctions
void
GNENet::moveSelection(const Position& moveSrc, const Position& moveDest) {
Position delta = moveDest - moveSrc;
// move junctions
std::set<GNEJunction*> junctionSet;
std::vector<GNEJunction*> junctions = retrieveJunctions(true);
for (std::vector<GNEJunction*>::iterator it = junctions.begin(); it != junctions.end(); it++) {
Position newPos = (*it)->getNBNode()->getPosition() + delta;
(*it)->move(newPos);
junctionSet.insert(*it);
}
// move edge geometry (endpoints are already moved)
std::vector<GNEEdge*> edges = retrieveEdges(true);
for (std::vector<GNEEdge*>::iterator it = edges.begin(); it != edges.end(); it++) {
GNEEdge* edge = *it;
if (edge) {
if (junctionSet.count(edge->getSource()) > 0 &&
junctionSet.count(edge->getDest()) > 0) {
// edge and its endpoints are selected, move all the inner points as well
edge->moveGeometry(delta);
} else {
// move only geometry near mouse
edge->moveGeometry(moveSrc, delta, true);
}
}
}
}
示例3: switch
void
GNEConnectorFrame::initTargets() {
// gather potential targets
NBNode* nbn = myCurrentLane->getParentEdge().getGNEJunctionDestiny()->getNBNode();
const EdgeVector& outgoing = nbn->getOutgoingEdges();
for (EdgeVector::const_iterator it = outgoing.begin(); it != outgoing.end(); it++) {
GNEEdge* edge = myViewNet->getNet()->retrieveEdge((*it)->getID());
const GNEEdge::LaneVector& lanes = edge->getLanes();
for (GNEEdge::LaneVector::const_iterator it_lane = lanes.begin(); it_lane != lanes.end(); it_lane++) {
myPotentialTargets.insert(*it_lane);
}
}
// set color for existing connections
const int fromIndex = myCurrentLane->getIndex();
NBEdge* srcEdge = myCurrentLane->getParentEdge().getNBEdge();
std::vector<NBEdge::Connection> connections = srcEdge->getConnectionsFromLane(fromIndex);
for (std::set<GNELane*>::iterator it = myPotentialTargets.begin(); it != myPotentialTargets.end(); it++) {
switch (getLaneStatus(connections, *it)) {
case CONNECTED:
(*it)->setSpecialColor(&targetColor);
break;
case CONNECTED_PASS:
(*it)->setSpecialColor(&targetPassColor);
break;
case CONFLICTED:
(*it)->setSpecialColor(&conflictColor);
break;
case UNCONNECTED:
(*it)->setSpecialColor(&potentialTargetColor);
break;
}
}
}
示例4: createEdge
GNEEdge*
GNENet::addReversedEdge(GNEEdge* edge, GNEUndoList* undoList) {
undoList->p_begin("add reversed edge");
GNEEdge* reversed = 0;
if (edge->getNBEdge()->getLaneSpreadFunction() == LANESPREAD_RIGHT) {
GNEEdge* reversed = createEdge(edge->getDest(), edge->getSource(), edge, undoList, "-" + edge->getID(), false, true);
assert(reversed != 0);
reversed->setAttribute(SUMO_ATTR_SHAPE, toString(edge->getNBEdge()->getInnerGeometry().reverse()), undoList);
} else {
// if the edge is centered it should probably connect somewhere else
// make it easy to move and reconnect it
PositionVector orig = edge->getNBEdge()->getGeometry();
PositionVector origInner = edge->getNBEdge()->getInnerGeometry();
const SUMOReal tentativeShift = edge->getNBEdge()->getTotalWidth() + 2;
orig.move2side(-tentativeShift);
origInner.move2side(-tentativeShift);
GNEJunction* src = createJunction(orig.back(), undoList);
GNEJunction* dest = createJunction(orig.front(), undoList);
GNEEdge* reversed = createEdge(src, dest, edge, undoList, "-" + edge->getID(), false, true);
assert(reversed != 0);
reversed->setAttribute(SUMO_ATTR_SHAPE, toString(origInner.reverse()), undoList);
// select the new edge and its nodes
std::set<GUIGlID> toSelect;
toSelect.insert(reversed->getGlID());
toSelect.insert(src->getGlID());
toSelect.insert(dest->getGlID());
undoList->add(new GNEChange_Selection(toSelect, gSelected.getSelected(), true), true);
}
undoList->p_end();
return reversed;
}
示例5: GNENetElement
GNELane::GNELane(GNEEdge& edge, const int index) :
GNENetElement(edge.getNet(), edge.getNBEdge()->getLaneID(index), GLO_LANE, SUMO_TAG_LANE),
myParentEdge(edge),
myIndex(index),
mySpecialColor(0),
myTLSEditor(0) {
updateGeometry();
}
示例6: deleteEdge
void
GNENet::reverseEdge(GNEEdge* edge, GNEUndoList* undoList) {
undoList->p_begin("reverse edge");
deleteEdge(edge, undoList); // still exists. we delete it so we can reuse the name in case of resplit
GNEEdge* reversed = createEdge(edge->getDest(), edge->getSource(), edge, undoList, edge->getID(), false, true);
assert(reversed != 0);
reversed->setAttribute(SUMO_ATTR_SHAPE, toString(edge->getNBEdge()->getInnerGeometry().reverse()), undoList);
undoList->p_end();
}
示例7: GNELane
void
GNENet::duplicateLane(GNELane* lane, GNEUndoList* undoList) {
undoList->p_begin("duplicate lane");
GNEEdge* edge = &lane->getParentEdge();
const NBEdge::Lane& laneAttrs = edge->getNBEdge()->getLaneStruct(lane->getIndex());
GNELane* newLane = new GNELane(*edge, lane->getIndex());
undoList->add(new GNEChange_Lane(edge, newLane, laneAttrs, true), true);
requireRecompute();
undoList->p_end();
}
示例8: assert
long
GNEInspectorFrame::onCmdCopyTemplate(FXObject*, FXSelector, void*) {
for (std::vector<GNEAttributeCarrier*>::iterator it = myACs.begin(); it != myACs.end(); it++) {
GNEEdge* edge = dynamic_cast<GNEEdge*>(*it);
assert(edge);
edge->copyTemplate(myEdgeTemplate, myViewNet->getUndoList());
inspect(myACs);
}
return 1;
}
示例9: if
bool
GNEDemandElement::isRouteValid(const std::vector<GNEEdge*>& edges, bool report) {
if (edges.size() == 0) {
// routes cannot be empty
return false;
} else if (edges.size() == 1) {
// routes with a single edge are valid
return true;
} else {
// iterate over edges to check that compounds a chain
auto it = edges.begin();
while (it != edges.end() - 1) {
GNEEdge* currentEdge = *it;
GNEEdge* nextEdge = *(it + 1);
// consecutive edges aren't allowed
if (currentEdge->getID() == nextEdge->getID()) {
return false;
}
// make sure that edges are consecutives
if (std::find(currentEdge->getGNEJunctionDestiny()->getGNEOutgoingEdges().begin(),
currentEdge->getGNEJunctionDestiny()->getGNEOutgoingEdges().end(),
nextEdge) == currentEdge->getGNEJunctionDestiny()->getGNEOutgoingEdges().end()) {
if (report) {
WRITE_WARNING("Parameter 'Route' invalid. " + currentEdge->getTagStr() + " '" + currentEdge->getID() +
"' ins't consecutive to " + nextEdge->getTagStr() + " '" + nextEdge->getID() + "'");
}
return false;
}
it++;
}
}
return true;
}
示例10: setPosition
void
GNEJunction::move(Position pos) {
const Position orig = myNBNode.getPosition();
setPosition(pos);
myNet->refreshElement(this);
const EdgeVector& incident = getNBNode()->getEdges();
for (EdgeVector::const_iterator it = incident.begin(); it != incident.end(); it++) {
GNEEdge* edge = myNet->retrieveEdge((*it)->getID());
edge->updateJunctionPosition(this, orig);
}
}
示例11:
bool
GNETLSEditorFrame::controlsEdge(GNEEdge& edge) const {
if (myEditedDef != 0) {
const NBConnectionVector& links = myEditedDef->getControlledLinks();
for (NBConnectionVector::const_iterator it = links.begin(); it != links.end(); it++) {
if ((*it).getFrom()->getID() == edge.getMicrosimID()) {
return true;
}
}
}
return false;
}
示例12: remapEdge
void
GNENet::mergeJunctions(GNEJunction* moved, GNEJunction* target, GNEUndoList* undoList) {
undoList->p_begin("merge junctions");
// position of moved and target are probably a bit different (snap radius)
moved->move(target->getNBNode()->getPosition());
// register the move with undolist (must happend within the undo group)
moved->registerMove(undoList);
// deleting edges changes in the underlying EdgeVector so we have to make a copy
const EdgeVector incoming = moved->getNBNode()->getIncomingEdges();
for (EdgeVector::const_iterator it = incoming.begin(); it != incoming.end(); it++) {
GNEEdge* oldEdge = myEdges[(*it)->getID()];
remapEdge(oldEdge, oldEdge->getSource(), target, undoList);
}
// deleting edges changes in the underlying EdgeVector so we have to make a copy
const EdgeVector outgoing = moved->getNBNode()->getOutgoingEdges();
for (EdgeVector::const_iterator it = outgoing.begin(); it != outgoing.end(); it++) {
GNEEdge* oldEdge = myEdges[(*it)->getID()];
remapEdge(oldEdge, target, oldEdge->getDest(), undoList);
}
deleteJunction(moved, undoList);
undoList->p_end();
}
示例13: toString
void
GNECreateEdgeFrame::processClick(const Position& clickedPosition, GNEViewNetHelper::ObjectsUnderCursor& objectsUnderCursor, bool opossiteEdge, bool chainEdge) {
if (!myViewNet->getUndoList()->hasCommandGroup()) {
myViewNet->getUndoList()->p_begin("create new " + toString(SUMO_TAG_EDGE));
}
if (!objectsUnderCursor.getJunctionFront()) {
objectsUnderCursor.setCreatedJunction(myViewNet->getNet()->createJunction(myViewNet->snapToActiveGrid(clickedPosition), myViewNet->getUndoList()));
}
if (myCreateEdgeSource == nullptr) {
myCreateEdgeSource = objectsUnderCursor.getJunctionFront();
myCreateEdgeSource->markAsCreateEdgeSource();
update();
} else {
if (myCreateEdgeSource != objectsUnderCursor.getJunctionFront()) {
// may fail to prevent double edges
GNEEdge* newEdge = myViewNet->getNet()->createEdge(
myCreateEdgeSource, objectsUnderCursor.getJunctionFront(), myViewNet->getViewParent()->getInspectorFrame()->getTemplateEditor()->getEdgeTemplate(), myViewNet->getUndoList());
if (newEdge) {
// create another edge, if create opposite edge is enabled
if (opossiteEdge) {
myViewNet->getNet()->createEdge(objectsUnderCursor.getJunctionFront(), myCreateEdgeSource, myViewNet->getViewParent()->getInspectorFrame()->getTemplateEditor()->getEdgeTemplate(), myViewNet->getUndoList(), "-" + newEdge->getNBEdge()->getID());
}
myCreateEdgeSource->unMarkAsCreateEdgeSource();
if (myViewNet->getUndoList()->hasCommandGroup()) {
myViewNet->getUndoList()->p_end();
} else {
std::cout << "edge created without an open CommandGroup )-:\n";
}
if (chainEdge) {
myCreateEdgeSource = objectsUnderCursor.getJunctionFront();
myCreateEdgeSource->markAsCreateEdgeSource();
myViewNet->getUndoList()->p_begin("create new " + toString(SUMO_TAG_EDGE));
} else {
myCreateEdgeSource = nullptr;
}
} else {
myViewNet->setStatusBarText("An " + toString(SUMO_TAG_EDGE) + " with the same geometry already exists!");
}
} else {
myViewNet->setStatusBarText("Start- and endpoint for an " + toString(SUMO_TAG_EDGE) + " must be distinct!");
}
update();
}
}
示例14: assert
void
GNENet::replaceJunctionByGeometry(GNEJunction* junction, GNEUndoList* undoList) {
undoList->p_begin("Replace junction by geometry");
assert(junction->getNBNode()->checkIsRemovable());
std::vector<std::pair<NBEdge*, NBEdge*> > toJoin = junction->getNBNode()->getEdgesToJoin();
for (std::vector<std::pair<NBEdge*, NBEdge*> >::iterator j = toJoin.begin(); j != toJoin.end(); j++) {
GNEEdge* begin = myEdges[(*j).first->getID()];
GNEEdge* continuation = myEdges[(*j).second->getID()];
deleteEdge(begin, undoList);
deleteEdge(continuation, undoList);
GNEEdge* newEdge = createEdge(begin->getSource(), continuation->getDest(), begin, undoList, begin->getMicrosimID(), false, true);
PositionVector newShape = begin->getNBEdge()->getInnerGeometry();
newShape.push_back(junction->getNBNode()->getPosition());
newShape.append(continuation->getNBEdge()->getInnerGeometry());
newEdge->setAttribute(SUMO_ATTR_SHAPE, toString(newShape), undoList);
// @todo what about trafficlights at the end of oontinuation?
}
deleteJunction(junction, undoList);
undoList->p_end();
}
示例15: switch
void
GNEFrame::ACHierarchy::showAttributeCarrierChilds(GNEAttributeCarrier *AC, FXTreeItem* itemParent) {
// Switch gl type of ac
switch (AC->getTag()) {
case SUMO_TAG_JUNCTION: {
// retrieve junction
GNEJunction* junction = myFrameParent->getViewNet()->getNet()->retrieveJunction(AC->getID(), false);
if(junction) {
// insert junction item
FXTreeItem* junctionItem = addACIntoList(AC, itemParent);
// insert edges
for (auto i : junction->getGNEEdges()) {
showAttributeCarrierChilds(i, junctionItem);
}
// insert crossings
for (auto i : junction->getGNECrossings()) {
showAttributeCarrierChilds(i, junctionItem);
}
}
break;
}
case SUMO_TAG_EDGE: {
// retrieve edge
GNEEdge* edge = myFrameParent->getViewNet()->getNet()->retrieveEdge(AC->getID(), false);
if(edge) {
// insert edge item
FXTreeItem* edgeItem = addACIntoList(AC, itemParent);
// insert lanes
for (int i = 0; i < (int)edge->getLanes().size(); i++) {
showAttributeCarrierChilds(edge->getLanes().at(i), edgeItem);
}
// insert additionals of edge
for (auto i : edge->getAdditionalChilds()) {
showAttributeCarrierChilds(i, edgeItem);
}
}
break;
}
case SUMO_TAG_LANE: {
// retrieve lane
GNELane* lane = myFrameParent->getViewNet()->getNet()->retrieveLane(AC->getID(), false);
if(lane) {
// insert lane item
FXTreeItem* laneItem = addACIntoList(AC, itemParent);
// insert additionals of lanes
for (auto i : lane->getAdditionalChilds()) {
showAttributeCarrierChilds(i, laneItem);
}
// insert incoming connections of lanes (by default isn't expanded)
if (lane->getGNEIncomingConnections().size() > 0) {
std::vector<GNEConnection*> incomingLaneConnections = lane->getGNEIncomingConnections();
FXTreeItem* incomingConnections = myTreelist->insertItem(0, laneItem, "Incomings", incomingLaneConnections.front()->getIcon(), lane->getGNEIncomingConnections().front()->getIcon());
myTreeItemsConnections.insert(incomingConnections);
incomingConnections->setExpanded(false);
// insert incoming connections
for (auto i : incomingLaneConnections) {
showAttributeCarrierChilds(i, incomingConnections);
}
}
// insert outcoming connections of lanes (by default isn't expanded)
if (lane->getGNEOutcomingConnections().size() > 0) {
std::vector<GNEConnection*> outcomingLaneConnections = lane->getGNEOutcomingConnections();
FXTreeItem* outgoingConnections = myTreelist->insertItem(0, laneItem, "Outcomings", outcomingLaneConnections.front()->getIcon(), lane->getGNEOutcomingConnections().front()->getIcon());
myTreeItemsConnections.insert(outgoingConnections);
outgoingConnections->setExpanded(false);
// insert outcoming connections
for (auto i : outcomingLaneConnections) {
showAttributeCarrierChilds(i, outgoingConnections);
}
}
}
break;
}
case SUMO_TAG_POI:
case SUMO_TAG_POLY:
case SUMO_TAG_CROSSING:
case SUMO_TAG_CONNECTION: {
// insert connection item
addACIntoList(AC, itemParent);
break;
}
default: {
// check if is an additional
if(GNEAttributeCarrier::getTagProperties(AC->getTag()).isAdditional()) {
// retrieve additional
GNEAdditional *additional = myFrameParent->getViewNet()->getNet()->retrieveAdditional(AC->getTag(), AC->getID(), false);
if(additional) {
// insert additional item
FXTreeItem* additionalItem = addACIntoList(AC, itemParent);
// insert additionals childs
for (auto i : additional->getAdditionalChilds()) {
showAttributeCarrierChilds(i, additionalItem);
}
}
}
break;
}
}
}