diff --git a/src/editor.py b/src/editor.py index c71b9db..327748e 100644 --- a/src/editor.py +++ b/src/editor.py @@ -429,9 +429,7 @@ class Editor: self.select_node(self.graph.number_of_nodes() - 1) def create_edge(self, node_1: int, node_2: int) -> None: - n1 = self.graph.nodes[node_1] - n2 = self.graph.nodes[node_2] - self.graph.add_edge(node_1, node_2, ((n1.x - n2.x) ** 2 + (n1.z - n2.z) ** 2) ** 0.5) + self.graph.add_edge(node_1, node_2) def get_hovering_nodes(self) -> tuple[list[int], list[float]]: hovering = [] diff --git a/src/graph/graph.py b/src/graph/graph.py index 5af4143..a28cba2 100644 --- a/src/graph/graph.py +++ b/src/graph/graph.py @@ -1,5 +1,5 @@ from __future__ import annotations -from math import inf +from math import inf, sqrt from typing import Iterator, Optional from src.graph.node import Node @@ -14,7 +14,11 @@ class Graph: def add_node(self, x: int, z: int, name: str = "") -> None: self.nodes.append(Node(x, z, len(self.nodes), name)) - def add_edge(self, start_index: int, end_index: int, length: float) -> None: + def add_edge(self, start_index: int, end_index: int, auto_length: bool = True) -> None: + length = 0 + if auto_length: + n1, n2 = self.nodes[start_index], self.nodes[end_index] + length = sqrt((n1.x - n2.x)**2 + (n1.z - n2.z)**2) self.edges.append(Edge(start_index, end_index, length, len(self.edges))) def delete_edge(self, edge: Edge) -> None: @@ -38,6 +42,12 @@ class Graph: for no in self.nodes: no.index = self.nodes.index(no) + def recompute_lengths(self) -> None: + for edge in self.edges: + n1 = self.nodes[edge.start] + n2 = self.nodes[edge.end] + edge.length = sqrt((n1.x - n2.x)**2 + (n1.z - n2.z)**2) + def number_of_nodes(self) -> int: return len(self.nodes) @@ -104,7 +114,7 @@ class Graph: f.write(f"n {node.x} {node.z} {node.name}\n") f.write("\n") for edge in self.edges: - f.write(f"e {edge.start} {edge.end} {edge.length}\n") + f.write(f"e {edge.start} {edge.end}\n") @staticmethod def load(path: str) -> Graph: @@ -121,7 +131,9 @@ class Graph: x, z = int(x), int(z) graph.add_node(x, z, name) elif entry_type == "e": - start, end, length = values.split(" ", 2) - start, end, length = int(start), int(end), float(length) - graph.add_edge(start, end, length) + start, end = values.split(" ", 2) + start, end = int(start), int(end) + graph.add_edge(start, end, False) + + graph.recompute_lengths() return graph diff --git a/src/graph/node.py b/src/graph/node.py index 87ed3f5..5bea4e3 100644 --- a/src/graph/node.py +++ b/src/graph/node.py @@ -4,6 +4,6 @@ class Node: self.z: int = z self.index: int = index self.name: str = name - + def rename_node(self, name: str): self.name = name \ No newline at end of file