import io.jbotsim.core.Node; import io.jbotsim.core.Topology; import io.jbotsim.ui.painting.BackgroundPainter; import io.jbotsim.ui.painting.UIComponent; import java.awt.*; import java.util.Map; import java.util.Set; public class FootprintPainter implements BackgroundPainter { private int lastDrawn = 0; private Graphics2D g2d; @Override public void paintBackground(UIComponent uiComponent, Topology topology) { try { if (lastDrawn >= topology.getTime()) return; PeriodicNode pNode = getFirstPeriodicNode(topology); if(pNode == null) return; lastDrawn = topology.getTime(); g2d = (Graphics2D) uiComponent.getComponent(); drawCompleteFootprint(pNode.footprint); } finally { g2d = null; } } private PeriodicNode getFirstPeriodicNode(Topology topology) { for(Node node: topology.getNodes()) if(node instanceof PeriodicNode) return (PeriodicNode) node; return null; } private void drawCompleteFootprint(Map> footprint) { for(Map.Entry> entrySet : footprint.entrySet()) for(Node node: entrySet.getValue()) drawLink(node, entrySet.getKey()); } private void drawLink(Node node1, Node node2) { g2d.setColor(Color.GRAY); g2d.setStroke(new BasicStroke(6)); int srcX = (int) node1.getX(), srcY = (int) node1.getY(); int destX = (int) node2.getX(), destY = (int) node2.getY(); g2d.drawLine(srcX, srcY, (srcX + (destX - srcX)), (srcY + (destY - srcY))); } }