Raphaeljs中getBBox的问题如果set包含空集

时间:2013-01-30 23:30:10

标签: javascript raphael

说你有Raphael set1,包含: - 一个矩形(r1) - 一组rects(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
    }

0 个答案:

没有答案