在 GraphStream 可视化中,图可以很密集。这enableAutoLayout
方法给出了图形的全局可视化,因此需要缩放。如何放大 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);
我试图找到一种使用鼠标滚轮缩放鼠标光标的方法,并偶然发现了这个线程,希望找到答案。我最终弄清楚了如何使用 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);
}
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)