Compare commits

..

1 Commits

Author SHA1 Message Date
Ugo Finnendahl 470fb700f4 added delete_edge 5 years ago
  1. 6
      README.md
  2. 34
      frontend/assets/js/canvas.js
  3. 4
      frontend/index.html
  4. 11
      main.py

@ -6,7 +6,7 @@ Voraussetzung ist Python in einer Version >=3.3 (bzw. venv). Normalerweise reich
```$ ./install.sh```
**INFO:** Manche Debian/Ubuntu basierten Systeme trennen Python3 und venv. Sollte dieser Fehler auftreten installieren Sie bitte venv nach (`apt-get install python3-venv`).
**INFO:** Manche Debian/Ubuntu basierten Systeme trennen Python3 und venv. Sollte dieser Fehler auftreten installieren Sie bitte venv nach(`apt-get install python3-venv`).
Sollte es Probleme mit der Python-Instanz geben kann diese manuell in der 4. Zeile von `install.sh` geändert werden.
@ -18,8 +18,8 @@ Das startet ein Webserver der auf Port 5000 lauscht.
## Kommentar
Entwickelt unter Linux Mint 19.1, Python 3.7 und Firefox. Beste Performanz mit Chromium.
Da mir gesagt wurde overachieving ist u.U. auch nicht gern gesehen (getreu dem Motto: "Zu früh kommen ist auch unpünktlich.") habe ich wirklich nur die Anforderungen implementiert.
Da mir gesagt wurde overachieving ist u.U. auch nicht gern gesehen (getreu dem Motto: "Zu früh kommen ist auch unpünktlich.") habe ich wirklich nur die Anforderungen implementiert. Um dennoch zu demonstrieren, dass ich mir Gedanken um die simple Erweiterung von Funktionalitäten gemacht habe, habe ich eine weitere CRUD Funktion in einem neuen Branch hinzugefügt. Diese kann im Branch [delete_edge](https://git.finnendahl.de/Yugon/TU_Assignment/commit/0d5778ada4c85305e4f63ab189c243b299a7ae31) begutachtet werden.
Um dennoch zu demonstrieren, dass ich mir Gedanken um die simple Erweiterung von Funktionalitäten gemacht habe, habe ich eine weitere CRUD Funktion auskommentiert hinzugefügt. Diese ist im Branch [delete_edge](https://git.finnendahl.de/Yugon/TU_Assignment/commit/0d5778ada4c85305e4f63ab189c243b299a7ae31) zu begutachten
Ach ja, und da zu der layout Methode nicht viel gesagt wurde hab ich mich mit force-directed-graphs etwas ausgetobt. Zu sehen per Klick auf Automatic Layout rechts unten.

@ -74,6 +74,7 @@ var info_timer = {};
// selected nodes
var selected = [];
var path_elements = [];
// (additions) auto layout
var auto_layout = false;
@ -109,6 +110,7 @@ function initialization() {
}
//-----------------------------------------------------------------------------
//------------------------------utils------------------------------------------
//-----------------------------------------------------------------------------
@ -205,6 +207,20 @@ function draw_new_edge(edge) {
return group;
}
function remove_canvas_edge(edge){
let konva_edge = stage.findOne('#' + edge["start"] + edge["end"]);
if (!konva_edge){
konva_edge = stage.findOne('#' + edge["end"] + edge["start"]);
}
if (konva_edge){
konva_edges.splice(konva_edges.indexOf(konva_edge),1);
graph_copy[edge["start"]].splice(graph_copy[edge["start"]].indexOf(edge["end"]),1);
graph_copy[edge["end"]].splice(graph_copy[edge["end"]].indexOf(edge["start"]),1);
konva_edge.remove();
edge_layer.draw();
}
}
function update_edge(konva_edge) {
let line = konva_edge.children[0];
let text = konva_edge.children[1];
@ -409,6 +425,24 @@ function find_path(data) {
.catch(error => console.error('Error:', error));
}
function delete_edge(data) {
if (data.length < 2) {
show_info("Select 2 nodes.");
return;
}
rest_req("DELETE", "edges/" + data[0].attrs.id + "/" + data[1].attrs.id, null)
.then(function(res) {
if (res["error"]) {
show_info(res["error"]);
} else {
remove_canvas_edge(res);
selected = [];
draw_selected_nodes();
}
})
.catch(error => console.error('Error:', error));
}
//-----------------------------------------------------------------------------
function save_graph() {

@ -25,6 +25,10 @@
<img src="{{ url_for('static', filename='imgs/share.svg') }}">
<h1>Find Path</h1>
</button>
<button type="button" onclick="delete_edge(selected)">
<img src="{{ url_for('static', filename='imgs/drawing.svg') }}">
<h1>Delete Edge</h1>
</button>
</nav>
<footer>
<div id="infobar"></div>

@ -19,7 +19,7 @@ def bellmann_ford(graph, node_a):
Kommentar:
Auch wenn Dijkstra der effizientere Algorithmus in diesem Falle wäre,
habe mich dazu entschieden Bellmann Ford zu implementieren.
Dijkstra musste ich schon mindestens 4 mal in meinem Studium/Schulzeit
Dijkstra musste ich schon mindestens 4 mal in meiner Ausbildung
implementieren. Ich hatte mal wieder Lust auf Dynamische Programmierung.
"""
# weights
@ -126,6 +126,15 @@ def create_edge():
return jsonify(edge), 201
@app.route('/api/edges/<start>/<end>', methods=['DELETE'])
def delete_edge(start, end):
if start in graph and end in graph[start]:
del graph[start][end]
del graph[end][start]
return jsonify({"start":start,"end":end}), 200
@app.route("/save")
def save():
try:

Loading…
Cancel
Save