added deletion

This commit is contained in:
2024-07-01 21:56:07 +02:00
parent df8198ef94
commit 77f11a7440
2 changed files with 44 additions and 4 deletions

View File

@@ -49,6 +49,7 @@ class Editor:
self.edge_detect_radius: int = 3 * self.line_size
self.selected_nodes: list[int] = []
self.selected_edges: list[int] = []
self.previously_created_nodes: list[int] = []
def mainloop(self) -> None:
self.state = State.LOADING
@@ -90,12 +91,15 @@ class Editor:
if event.key == pygame.K_ESCAPE:
if self.selected_nodes != [] or self.selected_edges != []:
self.clear_selection()
self.previously_created_nodes = []
else:
self.state = State.STOPPING
elif event.key == pygame.K_PAGEUP:
self.zoom_in()
elif event.key == pygame.K_PAGEDOWN:
self.zoom_out()
elif event.key == pygame.K_BACKSPACE:
self.deleted_selected_objects()
elif event.type == pygame.MOUSEBUTTONDOWN:
if event.button == 2:
self.mid_drag_pos = event.pos
@@ -321,6 +325,8 @@ class Editor:
def select_object(self, shifting: bool = False) -> None:
hover_index, is_node = self.get_hover_object()
self.previously_created_nodes = []
if is_node:
self.select_node(hover_index, shifting)
@@ -339,8 +345,8 @@ class Editor:
return
if node in self.selected_nodes:
self.selected_nodes.remove(node)
self.clear_selection()
self.selected_nodes.append(node)
return
if node != -1:
@@ -360,6 +366,7 @@ class Editor:
if edge in self.selected_edges:
self.clear_selection()
self.selected_edges.append(edge)
return
self.selected_edges = [] if edge == -1 else [edge]
self.selected_nodes = []
@@ -378,6 +385,8 @@ class Editor:
self.node_candidate_pos = None
self.typing = False
self.is_creating_node = False
if len(self.selected_nodes) == 1:
self.previously_created_nodes.append(self.selected_nodes[0])
self.select_node(self.graph.number_of_nodes() - 1)
def create_edge(self, node_1: int, node_2: int):
@@ -409,7 +418,6 @@ class Editor:
for edge in self.graph.edges:
dist = self.get_edge_distance(edge.index, mouse_pos[0], mouse_pos[1])
print(dist)
if dist < self.edge_detect_radius:
hovering.append(edge.index)
dists.append(dist)
@@ -448,8 +456,6 @@ class Editor:
proj_len = scal_prod / edge_vec_len
print(proj_len, edge_vec_len)
if proj_len < 0:
return self.get_node_distance(start_n.index, px, pz)
if proj_len > edge_vec_len:
@@ -460,6 +466,19 @@ class Editor:
node = self.graph.nodes[node_i]
node_pos = self.world_to_screen(node.x, node.z)
return ((px - node_pos[0]) ** 2 + (pz - node_pos[1]) ** 2) ** 0.5
def deleted_selected_objects(self):
edges_to_delete = [self.graph.edges[i] for i in self.selected_edges]
nodes_to_delete = [self.graph.nodes[i] for i in self.selected_nodes]
for edge in edges_to_delete:
self.graph.delete_edge(edge)
for node in nodes_to_delete:
self.graph.delete_node(node)
self.clear_selection()
n = len(self.previously_created_nodes)
if n != 0:
self.selected_nodes.append(self.previously_created_nodes[n - 1])
self.previously_created_nodes.pop()