From b8c445b3fc51cca89407dc9ea76fee6f5df70312 Mon Sep 17 00:00:00 2001
From: Thomas Kramer <code@tkramer.ch>
Date: Mon, 29 Apr 2024 22:04:02 +0200
Subject: [PATCH] inspect routing: shift layers for pseudo 3D plotting

---
 src/lclayout/graphrouter/inspect.py | 12 ++++++++++--
 src/lclayout/standalone.py          |  3 +++
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/lclayout/graphrouter/inspect.py b/src/lclayout/graphrouter/inspect.py
index 6e760df..1f8aee1 100644
--- a/src/lclayout/graphrouter/inspect.py
+++ b/src/lclayout/graphrouter/inspect.py
@@ -8,6 +8,7 @@ Wrap a graph router and add visual inspection capabilities.
 import os
 import math
 import networkx as nx
+from ..layout.layers import layermap
 
 from typing import *
 import logging
@@ -41,7 +42,8 @@ class InspectRouter(GraphRouter):
         solutions = self.sub_graphrouter.route(routing_problem)
 
         for routes in solutions:
-            self._inspect(routes)
+            if routes:
+                self._inspect(routes)
             yield routes
             self.iteration_count += 1
 
@@ -53,11 +55,17 @@ class InspectRouter(GraphRouter):
     def _plot_to_file(self, routes: Dict[Any, nx.Graph]):
         path = os.path.join(self.output_dir, f"routing_iter_{self.iteration_count:04}.png")
 
+        # Compute offsets for pseudo 3D plotting.
+        layer_names = sorted(layermap.keys(), key=lambda n: layermap[n][0])
+        layer_offset = {n: i for i, n in enumerate(layer_names)}
+        
+        # Find positions of graph nodes.
         pos = dict()
         for n in self._graph.nodes():
             if not self._is_virtual_node_fn(n):
                 layer, (x, y) = n
-                pos[n] = (x, y)
+                offset = 16*layer_offset[layer]
+                pos[n] = (x-offset, y+offset)
                 
         def hue2rgb(hue: float) -> str:
             # Create a HTML color code from a hue value.
diff --git a/src/lclayout/standalone.py b/src/lclayout/standalone.py
index edd50c8..4af7aca 100644
--- a/src/lclayout/standalone.py
+++ b/src/lclayout/standalone.py
@@ -924,6 +924,9 @@ def main():
                         level=log_level,
                         filename=args.log)
 
+    # Silence very verbose matplotlib.
+    logging.getLogger("matplotlib").setLevel(logging.WARNING)
+
     # Load netlist of cell
     cell_name = args.cell
     netlist_path = args.netlist
-- 
GitLab