From a759cdfd93aaa3f4dbfba889f77c6198b76149fb Mon Sep 17 00:00:00 2001 From: Pavel 'LEdoian' Turinsky Date: Fri, 30 Sep 2022 06:13:14 +0200 Subject: [PATCH] Add PoC visualisation [WIP] MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It almost works… meaning it manages to segfault. --- poor_mans_visualisation.py | 63 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 63 insertions(+) create mode 100644 poor_mans_visualisation.py diff --git a/poor_mans_visualisation.py b/poor_mans_visualisation.py new file mode 100644 index 0000000..bfa0a4a --- /dev/null +++ b/poor_mans_visualisation.py @@ -0,0 +1,63 @@ +#!/usr/bin/env python3 + +# Get topologies + +import sys +from birdvisu import maps_new +from birdvisu.maps_new import providers + +ref_topo_file = 'reference.ospf' +if len(sys.argv) > 1: + ref_topo_file = sys.argv[1] + +with open(ref_topo_file) as ref_file: + ref_topo = providers.OspfFileTopologyProvider(ref_file).get_topology() + +cur_topo = providers.RunningBirdTopologyProvider().get_topology() + +# Combine topologies + +combiner = maps_new.TopologyCombiner() +# NOTE: the following string literals convey meaning for annotators, so they +# should not be changed carelessly. +combiner.add_topology('reference', ref_topo) +combiner.add_topology('actual', cur_topo) + +final_topo = combiner.get_complete_topology() + +# Annotate it + +from birdvisu.visualisation import annotators + +annotated_topology = maps_new.annotate_topology(final_topo, + # A semi-canonical set of annotators: + [ + annotators.difference_annotator, + annotators.extract_positions, + annotators.random_position, + annotators.assign_brushes, + annotators.create_qgritems, + ] + ) + +# Render the widget + +from PySide6 import QtCore, QtGui, QtWidgets + +app = QtWidgets.QApplication([]) +scene = QtWidgets.QGraphicsScene() + +for tagsrc in [ + annotated_topology.router_annotations.values(), + annotated_topology.network_annotations.values(), + annotated_topology.link_annotations.values(), + ]: + for taglist in tagsrc: + assert len(taglist) > 0 + assert isinstance(taglist[-1], QtWidgets.QGraphicsItem) + scene.addItem(taglist[-1]) + +view = QtWidgets.QGraphicsView(scene) +view.show() + +app.exec()