我正在创建一个从 XML 文件(节点+边)创建图形的场景。该图在 iframe 中生成为 SVG。我想要做的是能够单击一个节点并聚焦该节点(不同的颜色,滚动到适当的位置)。
我得到的是,我在传递给 graphviz 的属性中传递了一个 URL,该 URL 在查询字符串中具有焦点节点,因此 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)。
为确保即使图像已缩放(它是 SVG,对)也能正常工作,您需要将滚动到的位置乘以 SVG 的总宽度与点图宽度之间的比率由“大小”图形属性设置(高度相同)。
关于php - Graphviz 关注一个节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5751408/