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)
我试图找到一种使用鼠标滚轮缩放鼠标光标的方法,并偶然发现了这个线程,希望能找到答案。我想出了如何最终使用 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)