2012-05-03 7 views
6

Kesişen bir nesnenin görünür x ve y sınırlarını bulmam gerekiyor, böylece etrafına başka nesneler yerleştirebiliyorum. Ancak, spec, getBBox'un klip yollarını dikkate almadığını belirtir, bu nedenle sınırlayıcı kutuyu kullanamıyorum. Herhangi bir fikir kırpılmış bir nesne için ekran sınırlarını nasıl bulabilirim?Kırpılmış bir nesne için "display" sınırlayıcı kutunun alınması

cevap

7

clipPath yolunda başvurulan ve bunun sınırlayıcı kutucuğunu gösteren bir gizli <use> öğesi oluşturun. Daha sonra sadece nesnenizin sınırlayıcı kutunun ve kullanım nesnesinin kesişmesini istiyorsunuz.

<defs> 
    <clipPath id="clipPath"> 
    <path id="path" ...> 
    </clipPath> 
</defs> 

<use id="clipPathBounds" visibility="hidden" xlink:href="#path"/> 
+0

Bundan biraz daha fazla yanal bir şey bulmayı umuyordum; Bir kavşağı hesaplamak genelde güçtür. Birkaç gün önce SVG listesinde uzun bir değişim yaptım ama maalesef şu anda bulamıyorum. – EML

+0

İki dikdörtgenin kesişimini hesaplamak kolaydır. result.x = max (x, aRect.x); sonuç.y = max (y, aRect.y); result.width = min (XMost(), aRect.XMost()) - sonuç.x; sonuç.seight = dak (YMost(), aRect.YMost()) - sonuç.y; halinde (result.width <0 || result.height <0) XMost() = rect.x + rect.height vb –

+0

Doğru, ama bir klips yolu nerede olabilir { her kesişen yoktu} tamamen genel. Keyfi bir Bezier'in kesişimini başka bir şeyle hesaplamayı deneyin. Yaptığım gibi, sadece dikdörtgen bir sonuç alsanız bile, o zaman önemsiz değildir. Genel olarak renderer tarafından piksel düzeyindeki ayrıntının ayrılması gerekir, ancak SVG bunu yapmak için herhangi bir yol tanımlamaz. – EML