Skip to content

Commit

Permalink
Fixed error inspecting and deleting elements. Refs #13894
Browse files Browse the repository at this point in the history
  • Loading branch information
palvarezlopez committed Dec 19, 2023
1 parent 6e46cb5 commit 3339d26
Show file tree
Hide file tree
Showing 3 changed files with 21 additions and 32 deletions.
16 changes: 8 additions & 8 deletions src/netedit/GNEViewNet.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -5637,7 +5637,7 @@ GNEViewNet::processLeftButtonPressNetwork(void* eventData) {
myObjectsUnderCursor.swapLane2Edge();
}
// now filter locked elements
myObjectsUnderCursor.filterLockedElements(myLockManager);
myObjectsUnderCursor.filterLockedElements();
// check if we're selecting a new parent for the current inspected element
if (myViewParent->getInspectorFrame()->getNeteditAttributesEditor()->isSelectingParent()) {
myViewParent->getInspectorFrame()->getNeteditAttributesEditor()->setNewParent(myObjectsUnderCursor.getAttributeCarrierFront());
Expand All @@ -5659,7 +5659,7 @@ GNEViewNet::processLeftButtonPressNetwork(void* eventData) {
// check that we have clicked over network element element
if (AC) {
// now filter locked elements forcing excluding walkingAreas
myObjectsUnderCursor.filterLockedElements(myLockManager, {GLO_WALKINGAREA});
myObjectsUnderCursor.filterLockedElements({GLO_WALKINGAREA});
// now check if we want only delete geometry points
if (myViewParent->getDeleteFrame()->getDeleteOptions()->deleteOnlyGeometryPoints()) {
// only remove geometry point
Expand All @@ -5685,7 +5685,7 @@ GNEViewNet::processLeftButtonPressNetwork(void* eventData) {
myObjectsUnderCursor.swapLane2Edge();
}
// now filter locked elements
myObjectsUnderCursor.filterLockedElements(myLockManager);
myObjectsUnderCursor.filterLockedElements();
// avoid to select if control key is pressed
if (!myMouseButtonKeyPressed.controlKeyPressed()) {
// check if a rect for selecting is being created
Expand Down Expand Up @@ -5759,7 +5759,7 @@ GNEViewNet::processLeftButtonPressNetwork(void* eventData) {
}
} else {
// now filter locked elements forcing excluding walkingAreas
myObjectsUnderCursor.filterLockedElements(myLockManager, {GLO_WALKINGAREA});
myObjectsUnderCursor.filterLockedElements({GLO_WALKINGAREA});
// allways swap lane to edges in movement mode
myObjectsUnderCursor.swapLane2Edge();
// check that AC under cursor isn't a demand element
Expand Down Expand Up @@ -5972,7 +5972,7 @@ GNEViewNet::processLeftButtonPressDemand(void* eventData) {
switch (myEditModes.demandEditMode) {
case DemandEditMode::DEMAND_INSPECT: {
// filter locked elements
myObjectsUnderCursor.filterLockedElements(myLockManager);
myObjectsUnderCursor.filterLockedElements();
// process left click in Inspector Frame
myViewParent->getInspectorFrame()->processDemandSupermodeClick(getPositionInformation(), myObjectsUnderCursor);
// process click
Expand All @@ -5998,7 +5998,7 @@ GNEViewNet::processLeftButtonPressDemand(void* eventData) {
}
case DemandEditMode::DEMAND_SELECT:
// filter locked elements
myObjectsUnderCursor.filterLockedElements(myLockManager);
myObjectsUnderCursor.filterLockedElements();
// avoid to select if control key is pressed
if (!myMouseButtonKeyPressed.controlKeyPressed()) {
// check if a rect for selecting is being created
Expand Down Expand Up @@ -6140,7 +6140,7 @@ GNEViewNet::processLeftButtonPressData(void* eventData) {
switch (myEditModes.dataEditMode) {
case DataEditMode::DATA_INSPECT: {
// filter locked elements
myObjectsUnderCursor.filterLockedElements(myLockManager);
myObjectsUnderCursor.filterLockedElements();
// process left click in Inspector Frame
if (AC && AC->getTagProperty().getTag() == SUMO_TAG_TAZ) {
myViewParent->getInspectorFrame()->inspectSingleElement(AC);
Expand Down Expand Up @@ -6170,7 +6170,7 @@ GNEViewNet::processLeftButtonPressData(void* eventData) {
}
case DataEditMode::DATA_SELECT:
// filter locked elements
myObjectsUnderCursor.filterLockedElements(myLockManager);
myObjectsUnderCursor.filterLockedElements();
// avoid to select if control key is pressed
if (!myMouseButtonKeyPressed.controlKeyPressed()) {
// check if a rect for selecting is being created
Expand Down
33 changes: 11 additions & 22 deletions src/netedit/GNEViewNetHelper.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -227,8 +227,8 @@ GNEViewNetHelper::ObjectsUnderCursor::updateObjectUnderCursor() {
// clear elements
myEdgeObjects.clearElements();
myLaneObjects.clearElements();
// process GUIGLObjects using myEdgeObjects.GUIGlObjects and myLaneObjects.GUIGlObjects
processGUIGlObjects();
// process GUIGLObjects using elements under cursor
processGUIGlObjects(gPostDrawing.getElementsUnderCursor());
}


Expand All @@ -240,30 +240,19 @@ GNEViewNetHelper::ObjectsUnderCursor::swapLane2Edge() {


void
GNEViewNetHelper::ObjectsUnderCursor::filterLockedElements(const GNEViewNetHelper::LockManager& lockManager, std::vector<GUIGlObjectType> forcedIgnoredTiped) {
// make a copy of edge and lane Attribute carriers
auto edgeACs = myEdgeObjects.attributeCarriers;
auto laneACs = myLaneObjects.attributeCarriers;
GNEViewNetHelper::ObjectsUnderCursor::filterLockedElements(const std::vector<GUIGlObjectType> forcedTypes) {
std::vector<const GUIGlObject*> filteredObjects;
// clear elements
myEdgeObjects.clearElements();
myLaneObjects.clearElements();
// filter GUIGLObjects
for (const auto& edgeAC : edgeACs) {
if (std::find(forcedIgnoredTiped.begin(), forcedIgnoredTiped.end(), edgeAC->getGUIGlObject()->getType()) != forcedIgnoredTiped.end()) {
continue;
} else if (!lockManager.isObjectLocked(edgeAC->getGUIGlObject()->getType(), edgeAC->isAttributeCarrierSelected())) {
myEdgeObjects.GUIGlObjects.push_back(edgeAC->getGUIGlObject());
}
}
for (const auto& laneAC : laneACs) {
if (std::find(forcedIgnoredTiped.begin(), forcedIgnoredTiped.end(), laneAC->getGUIGlObject()->getType()) != forcedIgnoredTiped.end()) {
continue;
} else if (!lockManager.isObjectLocked(laneAC->getGUIGlObject()->getType(), laneAC->isAttributeCarrierSelected())) {
myLaneObjects.GUIGlObjects.push_back(laneAC->getGUIGlObject());
for (const auto& glObject : gPostDrawing.getElementsUnderCursor()) {
if (!glObject->isGLObjectLocked() && (std::find(forcedTypes.begin(), forcedTypes.end(), glObject->getType()) == forcedTypes.end())) {
filteredObjects.push_back(glObject);
}
}
// process GUIGLObjects using myEdgeObjects.GUIGlObjects and myLaneObjects.GUIGlObjects
processGUIGlObjects();
processGUIGlObjects(filteredObjects);
}


Expand Down Expand Up @@ -1050,9 +1039,9 @@ GNEViewNetHelper::ObjectsUnderCursor::updateGenericDataElements(ObjectsContainer


void
GNEViewNetHelper::ObjectsUnderCursor::processGUIGlObjects() {
GNEViewNetHelper::ObjectsUnderCursor::processGUIGlObjects(const std::vector<const GUIGlObject*>& glObjects) {
// iterate over filtered edge objects
for (const auto& glObject : gPostDrawing.getElementsUnderCursor()) {
for (const auto& glObject : glObjects) {
// update all elements by categories
updateNetworkElements(myEdgeObjects, glObject, true);
updateAdditionalElements(myEdgeObjects, glObject);
Expand All @@ -1062,7 +1051,7 @@ GNEViewNetHelper::ObjectsUnderCursor::processGUIGlObjects() {
updateGenericDataElements(myEdgeObjects, glObject);
}
// iterate over filtered lane objects
for (const auto& glObject : gPostDrawing.getElementsUnderCursor()) {
for (const auto& glObject : glObjects) {
// update all elements by categories
updateNetworkElements(myLaneObjects, glObject, false);
updateAdditionalElements(myLaneObjects, glObject);
Expand Down
4 changes: 2 additions & 2 deletions src/netedit/GNEViewNetHelper.h
Original file line number Diff line number Diff line change
Expand Up @@ -230,7 +230,7 @@ struct GNEViewNetHelper {
void swapLane2Edge();

/// @brief filter locked elements
void filterLockedElements(const GNEViewNetHelper::LockManager& lockManager, std::vector<GUIGlObjectType> forcedIgnoredTiped = {});
void filterLockedElements(const std::vector<GUIGlObjectType> forcedTypes = {});

/// @brief short data elements by begin
void shortDataElements();
Expand Down Expand Up @@ -424,7 +424,7 @@ struct GNEViewNetHelper {
void updateGenericDataElements(ObjectsContainer& container, const GUIGlObject* glObject);

/// @brief process GL objects
void processGUIGlObjects();
void processGUIGlObjects(const std::vector<const GUIGlObject*>& glObjects);

/// @brief default constructor
ObjectsUnderCursor();
Expand Down

0 comments on commit 3339d26

Please sign in to comment.