如何放大 GraphStream 视图?

Jok*_* 00 3 zooming graphstream

在 GraphStream 可视化中,图形可以是密集的。该enableAutoLayout方法提供了 Graph 的全局可视化,因此需要进行缩放。如何放大 GraphStream 视图?

Graph go=...;
Viewer viewer = new Viewer(go, Viewer.ThreadingModel.GRAPH_IN_ANOTHER_THREAD);
viewer.enableAutoLayout();
View view = viewer.addDefaultView(false); 
swingNode.setContent((JComponent) view);
Run Code Online (Sandbox Code Playgroud)

Mic*_*sLE 5

我试图找到一种使用鼠标滚轮缩放鼠标光标的方法,并偶然发现了这个线程,希望能找到答案。我想出了如何最终使用 GraphStream 缩放到鼠标:

在我的情况下,每次鼠标滚轮旋转的缩放系数为 1.25(或缩小时为 0.8)。该代码根据图形的原始中心、图形中的单击点、缩放以及最终可以从相机检索到的 Px 与 Gu 的比率计算图形的新中心。

final Viewer viewer = new Viewer(graph, Viewer.ThreadingModel.GRAPH_IN_ANOTHER_THREAD);
viewer.enableAutoLayout();
final View view = viewer.addDefaultView(false);
view.getCamera().setViewPercent(1);
((Component) view).addMouseWheelListener(new MouseWheelListener() {
    @Override
    public void mouseWheelMoved(MouseWheelEvent e) {
        e.consume();
        int i = e.getWheelRotation();
        double factor = Math.pow(1.25, i);
        Camera cam = view.getCamera();
        double zoom = cam.getViewPercent() * factor;
        Point2 pxCenter  = cam.transformGuToPx(cam.getViewCenter().x, cam.getViewCenter().y, 0);
        Point3 guClicked = cam.transformPxToGu(e.getX(), e.getY());
        double newRatioPx2Gu = cam.getMetrics().ratioPx2Gu/factor;
        double x = guClicked.x + (pxCenter.x - e.getX())/newRatioPx2Gu;
        double y = guClicked.y - (pxCenter.y - e.getY())/newRatioPx2Gu;
        cam.setViewCenter(x, y, 0);
        cam.setViewPercent(zoom);
    }
});
Run Code Online (Sandbox Code Playgroud)