次を含む Raphael set1 があるとします。 - rect (r1) - rect のセット (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
}