Graphviz专注于一个节点


Graphviz focus on a node

我正在创建一个场景,我从XML文件(节点+边)创建一个图。图形在iframe内作为SVG生成。我想做的是能够点击一个节点,并有该节点聚焦(不同的颜色,滚动到位置)。

我所得到的是,我传递一个URL的属性传递给graphviz有焦点节点在查询字符串所以my- URL。php?Focus =2将聚焦节点id 2。然后,在属性创建过程中,我将焦点节点的颜色更改为亮黄色。

问题是我找不到向下滚动到这个节点的方法。我必须手动向下滚动搜索节点。是否有一种方法,我可以得到焦点节点的坐标,并将其传递给托管iframe的窗口?这样,我就可以使用Javascript向下(或向右)滚动。

任何想法?我不是在寻找一个完整的解决方案。我可以接受一个可行的策略(并且可以在最新的浏览器上运行)。它不需要向后兼容)。

谢谢。

可以通过调用不带-T选项的dot来检索SVG中节点的位置(它生成点文件,其中节点用"pos"属性进行注释,指示绘制节点的位置)。然后,当$_GET['focus']为42(即;my-url.php吗?(请求focus=42), my-url.php应该生成Javascript代码,使用类似scrollTo (http://stackoverflow.com/questions/1192228/scrolling-an-iframe-with-javascript)的东西将iframe滚动到节点42的位置。

为了确保即使图像已经缩放(它是SVG,对吧)也能正常工作,您需要将滚动到的位置乘以SVG的总宽度与由"size"图形属性设置的点画宽度之间的比率(高度也是如此)。