diff --git a/Gvisual/src/gvisual/Main.java b/Gvisual/src/gvisual/Main.java index 5e89771..89e7042 100644 --- a/Gvisual/src/gvisual/Main.java +++ b/Gvisual/src/gvisual/Main.java @@ -102,22 +102,57 @@ public class Main extends JFrame { /** * Push current overlay state to the GraphRenderers instance so that * transformers see up-to-date values on every render pass. + * + *
Each controller is queried only once per field via local variables, + * improving readability and eliminating the repeated null-check chains + * that previously made this method hard to read and maintain.
*/ private void syncRenderers() { renderers.setGraph(g); - renderers.setPathState( - pathController != null ? pathController.getPathEdges() : java.util.Collections.emptySet(), - pathController != null ? pathController.getPathVertices() : java.util.Collections.emptySet(), - pathController != null ? pathController.getPathSource() : null, - pathController != null ? pathController.getPathTarget() : null); - renderers.setMstState( - mstController != null && mstController.isOverlayActive(), - mstController != null ? mstController.getMstEdges() : java.util.Collections.emptySet()); - renderers.setCommunityState( - communityController != null && communityController.isOverlayActive(), - communityController != null ? communityController.getNodeCommunityMap() : null); - renderers.setArticulationState(articulationController != null && articulationController.isOverlayActive(), articulationController != null ? articulationController.getArticulationPoints() : java.util.Collections.emptySet(), articulationController != null ? articulationController.getBridgeEdges() : java.util.Collections.emptySet()); - renderers.setEgoState(egoController.isOverlayActive(), egoController.getCenter(), egoController.getNeighbors(), egoController.getEdges()); + + // Path overlay + if (pathController != null) { + renderers.setPathState( + pathController.getPathEdges(), + pathController.getPathVertices(), + pathController.getPathSource(), + pathController.getPathTarget()); + } else { + renderers.setPathState( + java.util.Collections.emptySet(), + java.util.Collections.emptySet(), + null, null); + } + + // MST overlay + boolean mstActive = mstController != null && mstController.isOverlayActive(); + renderers.setMstState(mstActive, + mstController != null ? mstController.getMstEdges() + : java.util.Collections.emptySet()); + + // Community overlay + boolean communityActive = communityController != null + && communityController.isOverlayActive(); + renderers.setCommunityState(communityActive, + communityController != null ? communityController.getNodeCommunityMap() + : null); + + // Articulation point overlay + boolean artActive = articulationController != null + && articulationController.isOverlayActive(); + renderers.setArticulationState(artActive, + articulationController != null ? articulationController.getArticulationPoints() + : java.util.Collections.emptySet(), + articulationController != null ? articulationController.getBridgeEdges() + : java.util.Collections.emptySet()); + + // Ego network overlay + renderers.setEgoState( + egoController.isOverlayActive(), + egoController.getCenter(), + egoController.getNeighbors(), + egoController.getEdges()); + renderers.setOldVertices(OldVertices); } private ListEach cluster cell is 300×200 pixels. Vertices are placed via a + * deterministic random walk (seed=42) with step sizes in [5, 44] in + * each axis, randomly signed.
+ * + * @param vertices list of vertices to position + * @param row grid row (0-based) + * @param col grid column (0-based) + */ + public void positionCluster(List