model: river: Keep current reach in memory.

mesh
Pierre-Antoine Rouby 2023-04-05 14:50:55 +02:00
parent 5b33093ed1
commit 150388af12
3 changed files with 33 additions and 9 deletions

View File

@ -9,6 +9,9 @@ class Graph(object):
def __init__(self): def __init__(self):
super(Graph, self).__init__() super(Graph, self).__init__()
self._node_ctor = Node
self._edge_ctor = Edge
self._nodes_ids = 0 self._nodes_ids = 0
self._edges_ids = 0 self._edges_ids = 0
@ -55,27 +58,34 @@ class Graph(object):
) )
)[0] )[0]
def add_node(self, x:float = 0.0, y:float = 0.0): def _add_node(self, node):
node = Node(
self._nodes_ids,
f"Node {self._nodes_ids}",
x = x, y = y
)
self._nodes.append(node) self._nodes.append(node)
self._nodes_ids += 1 self._nodes_ids += 1
return node return node
def add_edge(self, n1:Node, n2:Node): def add_node(self, x:float = 0.0, y:float = 0.0):
node = self._node_ctor(
self._nodes_ids,
f"Node {self._nodes_ids}",
x = x, y = y
)
return self._add_node(node)
def _add_edge(self, edge):
# This edge already exists ? # This edge already exists ?
if any(filter(lambda e: (e.node1 == n1 and e.node2 == n2), if any(filter(lambda e: (e.node1 == edge.node1 and
e.node2 == edge.node2),
self._edges)): self._edges)):
return None return None
edge = Edge(self._edges_ids, "", n1, n2)
self._edges.append(edge) self._edges.append(edge)
self._edges_ids += 1 self._edges_ids += 1
return edge return edge
def add_edge(self, n1:Node, n2:Node):
edge = self._edge_ctor(self._edges_ids, "", n1, n2)
return self._add_edge(edge)
def remove_node(self, node_name:str): def remove_node(self, node_name:str):
self._nodes = list( self._nodes = list(
filter( filter(

View File

@ -31,3 +31,16 @@ class RiverReach(Edge):
class River(Graph): class River(Graph):
def __init__(self): def __init__(self):
super(River, self).__init__() super(River, self).__init__()
# Replace Node and Edge ctor by custom ctor
self._node_ctor = RiverNode
self._edge_ctor = RiverReach
self._current_reach = None
def current_reach(self):
return self._current_reach
def current_reach(self, reach):
self._current_reach = reach

View File

@ -548,6 +548,7 @@ class GraphWidget(QGraphicsView):
""" """
previous_edge = self._current_edge previous_edge = self._current_edge
self._current_edge = edge self._current_edge = edge
self.graph.current_reach(edge.edge)
if previous_edge: if previous_edge:
previous_edge.update() previous_edge.update()