假设您有 Raphael set1,其中包含: - 一个矩形 (r1) - 一组矩形 (set2) - 一个空集 (set3)。
在 Raphael element.getBBox() 将适用于 set2。但是对于 set1,它将返回 NaN(对于 x2、y2、宽度和高度 - 但对于 x 和 y 则不会,它们可以正常工作)。但是 set1 确实有宽度和高度,因为它还包含 r1 和 set2。
set3.getBBox().y2 将返回 -Infinity。
我编写了一个小函数,可以帮助我获得包含空集的集合的“真实”getBBox(),但它非常复杂。我敢肯定有更直接的方法可以解决这个问题,但我对 js 的了解还不够。另外,我的代码可能还有一些我还没有看到的问题。有任何想法吗?谢谢!
function newBBox(e){
function clean(s){
for (var i=s.length-1; i>=0; i--){
if (isNaN(s[i].getBBox().y2)) s[i] = clean(s[i])
else if (s[i].getBBox().y2 == -Infinity) s.exclude(s[i]);
};
return s;
}
if (!isNaN(e.getBBox().y2)) return e.getBBox();
// if not ok, e must be a set that at some point contains an empty set. Lets find it, exclude it and return the getBBox for the new set
return clean(e.clone()).getBBox(); // can´t use e because its a pointer to the original set and we'll be excluding things from the set
}