2017-09-13 77 views
0

我需要知道svg对象是否与另一个svg对象相邻。所以我需要得到它的边界。这些对象可以是矩形或路径。当他们是直的时候,这很容易,但当他们弯曲或弯曲时,我不知道该怎么做。获取弯曲的svg对象的呈现边框

我的意思的例子可以发现here或短的例子在这里:

<svg id="mysvg" xmlns="http://www.w3.org/2000/svg" viewBox="0 200 512 512"> 
    <path d="m 223.40414,282.21605 35.53211,-3.88909 0,-18.73833 -19.79899,-0.17678 c -5.83251,7.19542 -10.70707,15.0451 -15.73312,22.8042 z" id="pB"></path> 
</svg> 

如果我使用的盒的角落,我创建了一个virtual直矩形,其相邻的对象不等于邻道的渲染对象。 我该怎么做?

+0

https://www.w3.org/TR/SVG/paths.html#__svg__SVGPathElement__getPointAtLength –

回答

0

Snap库为您的问题提供了一些不错的工具。你的问题没有定义“相邻”应该是什么意思。这里是设定阈值的最大距离为路径之间的函数:

var threshold = 1; 

function isAdjacent (id1, id2) { 
    var s = Snap("#mysvg"); 
    var first = s.select('#' + id1); 
    var second = s.select('#' + id2); 

    var len = first.getTotalLength(first); 

    var p1, p2; 
    for (var at = 0; at <= len; at += threshold) { 
     p1 = first.getPointAtLength(at); 
     if (Snap.closestPoint(second, p1.x, p1.y).distance <= threshold) { 
      return true; 
     } 
    } 
    return false; 
} 

JsFiddle