mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-06-05 12:21:59 +02:00
[graph] delete all Node edges in removeNode
Delete all edges arriving to and starting from this node. This includes edges connected to sub-attributes (children of List/GroupAttributes).
This commit is contained in:
parent
e38f112c55
commit
eccef6bed8
1 changed files with 20 additions and 10 deletions
|
@ -838,25 +838,35 @@ class Graph(BaseObject):
|
||||||
# type: (Attribute,) -> [Edge]
|
# type: (Attribute,) -> [Edge]
|
||||||
return [edge for edge in self.edges if edge.src == attribute]
|
return [edge for edge in self.edges if edge.src == attribute]
|
||||||
|
|
||||||
|
def nodeInEdges(self, node):
|
||||||
|
# type: (Node) -> [Edge]
|
||||||
|
""" Return the list of edges arriving to this node """
|
||||||
|
return [edge for edge in self.edges if edge.dst.node == node]
|
||||||
|
|
||||||
|
def nodeOutEdges(self, node):
|
||||||
|
# type: (Node) -> [Edge]
|
||||||
|
""" Return the list of edges starting from this node """
|
||||||
|
return [edge for edge in self.edges if edge.src.node == node]
|
||||||
|
|
||||||
def removeNode(self, nodeName):
|
def removeNode(self, nodeName):
|
||||||
"""
|
"""
|
||||||
Remove the node identified by 'nodeName' from the graph
|
Remove the node identified by 'nodeName' from the graph
|
||||||
and return in and out edges removed by this operation in two dicts {dstAttr.fullName(), srcAttr.fullName()}
|
and return in and out edges removed by this operation in two dicts {dstAttr.fullName(), srcAttr.fullName()}
|
||||||
"""
|
"""
|
||||||
node = self.node(nodeName)
|
node = self.node(nodeName)
|
||||||
self._nodes.pop(nodeName)
|
|
||||||
|
|
||||||
inEdges = {}
|
inEdges = {}
|
||||||
outEdges = {}
|
outEdges = {}
|
||||||
with GraphModification(self):
|
|
||||||
for attr in node._attributes:
|
|
||||||
for edge in self.outEdges(attr):
|
|
||||||
self.edges.remove(edge)
|
|
||||||
outEdges[edge.dst.fullName()] = edge.src.fullName()
|
|
||||||
if attr in self.edges.keys():
|
|
||||||
edge = self.edges.pop(attr)
|
|
||||||
inEdges[edge.dst.fullName()] = edge.src.fullName()
|
|
||||||
|
|
||||||
|
# Remove all edges arriving to and starting from this node
|
||||||
|
with GraphModification(self):
|
||||||
|
for edge in self.nodeOutEdges(node):
|
||||||
|
self.edges.remove(edge)
|
||||||
|
outEdges[edge.dst.fullName()] = edge.src.fullName()
|
||||||
|
for edge in self.nodeInEdges(node):
|
||||||
|
self.edges.remove(edge)
|
||||||
|
inEdges[edge.dst.fullName()] = edge.src.fullName()
|
||||||
|
|
||||||
|
self._nodes.remove(node)
|
||||||
return inEdges, outEdges
|
return inEdges, outEdges
|
||||||
|
|
||||||
@Slot(str, result=Node)
|
@Slot(str, result=Node)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue