2012-06-13 38 views
0

我想添加交互性到我在Gephi中输出SVG的网络图中。我正在使用一个喜欢我的节点的Raphael模板作为SVG圈输入。问题是我的Gephi的SVG圈实际上是贝塞尔曲线。例如:从Illustrator/Gephi创建本地SVG <circle>元素

<path fill="#D52A2A" d="M663.395,426.958c0-2.869-2.324-5.194-5.193-5.194s-5.191,2.325-5.191,5.194 
c0,2.867,2.322,5.189,5.191,5.189C661.069,432.148,663.395,429.826,663.395,426.958"/> 

是否有任何方法将这样的路径转换为带有x,y和radius的标准SVG圆元素?

回答

1

你可以分析的路径,但它更容易,如果你知道哪些路径是圆形的,首先,那么你可以做一个快速近似这样的:

var p = document.querySelector("path"); 
var c = document.createElementNS("http://www.w3.org/2000/svg", "circle"); 
var b = p.getBBox(); 
c.cx.baseVal.value = b.x + b.width/2; 
c.cy.baseVal.value = b.y + b.height/2; 
c.r.baseVal.value = b.width/2; // assuming width and height are the same 
p.parentNode.appendChild(c); 

提示你的路径是一个圆可能bbox的宽度和高度非常接近,或者gephi输出的路径'd'属性总是对圆圈使用相同的形式(不确定是否是这种情况)。

Gephi是开源的,所以另一种选择是让它输出你想要开始的东西。

更新:here's a jsfiddle显示此项。

+0

这很有道理。只是关于如何让解析器工作的一个基本问题。你如何加载在选择器document.querySelector(“路径”)的svg文件运行?你可以通过jQuery做类似$ .ajax的东西,用“data”替换“document”吗?或者像拉斐尔虎示例[链接](http://raphaeljs.com/tiger.html)中那样将其加载为变量并选择变量? – mhkeller