2015-02-09 79 views
0

我正在使用Snap SVG在我正在制作的Web应用程序内操纵SVG。在这个Web应用程序中,我有两个矩形,一个在另一个的内部,将它们称为rectInner和rectOuter。其目的是允许用户将rectOuter(比例,旋转,平移)转换为rectOuter内部的rectInner始终为严格。要清楚,rectInner将永远不会移动或被转换。Snap SVG - 检查一个转换后的矩形是否完全位于另一个矩形内部?

我对这个问题的方法是获取rectInner和rectOuter的边界框,并检查第一个是否严格包含在第二个中。 Snap SVG提供了一个函数isBBoxIntersect(rectInner,rectOuter),但它只能告诉我边界框的一部分是否相交,而不是一个是否包含在另一个中。

有没有简单的方法来做到这一点?

编辑:

现在看来,我有些误解的包围盒的概念,但问题应该是简单的。如果我可以在所有变换之后找到计算rectOuter的四个顶点的方法,那么只要rectInner的拐角位于由这些顶点构成的路径的内部,整个矩形就是。我认为。

回答

0
##### coffeescript 
el = Snap('rect#outer') 
mat = el.attr('transform').totalMatrix 

left = +el.attr('x') 
top = +el.attr('y') 
right = left + (+el.attr('width')) 
bottom = top + (+el.attr('height')) 

console.log(left, top, right, bottom) 

points = { 
    x: mat.x(left, top) 
    y: mat.y(left, top) 
    x2:mat.x(right, top) 
    y2:mat.y(right, top) 
    x3:mat.x(right, bottom) 
    y3:mat.y(right, bottom) 
    x4:mat.x(left, bottom) 
    y4:mat.y(left, bottom) 
} 

使用矩阵! 你可以在mat变量中找到更多的矩阵。 如果totalMatrix没有工作,那么尝试另一个。

相关问题