Graphstream图自动布局的操作
来源:爱站网时间:2022-04-09编辑:网友分享
如果想在java编程上进行Graphstream图自动布局的操作,你知道怎么处理会比较方便吗?接下来的时间就让爱站技术频道小编来给大家详细讲解下吧!
问题描述
如果我对Graphstream图中的某些节点有一些固定的坐标,我可以让Graphstream来“填补空白”并自动布局那些没有手动指定位置的节点吗?
例如:
Node n1 = graph.addNode("n1");
n1.setAttribute("xy",-0.1,53.35);
Node n2 = graph.addNode("n2");
graph.addEdge("n1n2",n1,n2);
Node n3 = graph.addNode("n3");
n3.setAttribute("xy",-0.4,56.35);
graph.addEdge("n2n3",n2,n3);
鉴于上述情况,n2没有指定位置。是否可以要求GraphStream进行推断,而不是仅仅因为不知道它在哪里而不显示它?
如果使用viewer.disableAutoLayout();
,它将不会显示未定位的节点;如果我使用viewer.enableAutoLayout();
,它将忽略我的手动节点位置。
思路:
尽管可以推断出的位置不是已知位置的平均值,但是有些设置可以用来(排序)。”>
适应上面的代码:
Node n1 = graph.addNode("n1");
n1.setAttribute("xy",-0.1,53.35);
n1.addAttribute("layout.frozen");
Node n2 = graph.addNode("n2");
graph.addEdge("n1n2",n1,n2);
Node n3 = graph.addNode("n3");
n3.setAttribute("xy",-0.4,56.35);
n3.addAttribute("layout.frozen");
graph.addEdge("n2n3",n2,n3);
SpringBox layout = new SpringBox(false,new Random(0));
viewer.enableAutoLayout(layout);
将layout.frozen
属性添加到具有已知位置的那些节点,将防止它们被布局管理器移动。
但是,推断出的位置/边长不一定与已知的相同。可以通过在每个节点和每个边上设置layout.weight
属性(大于0的数字)来进行调整。在边缘,它是目标边缘长度的乘数。
相信朋友们都看完了Graphstream图自动布局的操作内容吧!如果你对这方面的了解需要进一步的话,可以直接来网站咨询小编,或者来网站寻找相关资料。